Package | hl7.fhir.it.cda2fhir |
Type | StructureMap |
Id | Id |
FHIR Version | R4 |
Source | http://hl7.it/fhir/cda2fhir/https://build.fhir.org/ig/hl7-it/cda2fhir/StructureMap-cda2fhirLdo.html |
Url | http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirLdo |
Version | 0.1.0 |
Status | draft |
Date | 2024-09-15T08:16:12+00:00 |
Name | cda2fhirLdo |
Experimental | False |
Realm | it |
Authority | hl7 |
No resources found
No resources found
Note: links and images are rebased to the (stated) source
map "http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirLdo" = "cda2fhirLdo" uses "http://hl7.org/fhir/cda/StructureDefinition/ClinicalDocument" alias ClinicalDocument as source uses "http://hl7.org/fhir/cda/StructureDefinition/AssignedAuthor" alias AssignedAuthor as queried uses "http://hl7.org/fhir/cda/StructureDefinition/AssignedEntity" alias AssignedEntity as queried uses "http://hl7.org/fhir/cda/StructureDefinition/AssociatedEntity" alias AssociatedEntity as queried uses "http://hl7.org/fhir/cda/StructureDefinition/CustodianOrganization" alias CustodianOrganization as queried uses "http://hl7.org/fhir/cda/StructureDefinition/OrganizationPartOf" alias OrganizationPartOf as queried uses "http://hl7.org/fhir/cda/StructureDefinition/Organization" alias rapresentedOrganization as queried uses "http://hl7.org/fhir/cda/StructureDefinition/Section" alias Section as queried uses "http://hl7.org/fhir/cda/StructureDefinition/PatientRole" alias PatientRole as queried uses "http://hl7.org/fhir/cda/StructureDefinition/AD" alias AD as source uses "http://hl7.org/fhir/StructureDefinition/Bundle" alias Bundle as target uses "http://hl7.org/fhir/StructureDefinition/Composition" alias Composition as produced uses "http://hl7.org/fhir/StructureDefinition/Patient" alias Patient as produced uses "http://hl7.org/fhir/StructureDefinition/Encounter" alias Encounter as produced uses "http://hl7.org/fhir/StructureDefinition/Person" alias Patient as produced uses "http://hl7.org/fhir/StructureDefinition/Practitioner" alias Practitioner as produced uses "http://hl7.org/fhir/StructureDefinition/Organization" alias Organization as produced uses "http://hl7.org/fhir/cda/StructureDefinition/Act" alias Act as produced uses "http://hl7.org/fhir/cda/StructureDefinition/IVL-PQ" alias IVL_PQ as source uses "http://hl7.org/fhir/cda/StructureDefinition/PQ" alias PQ as source uses "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" alias SimpleQuantity as target imports "http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirDataTypes" imports "http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirHeader" group CdaToBundle(source cda : ClinicalDocument, target bundle : Bundle) { cda -> bundle.entry as e, e.request = create('BackboneElement') as request, request.method = 'POST', e.resource = create('Composition') as composition, composition.id = uuid() as uuid1, e.fullUrl = append('https://example/Composition/', uuid1), request.url = 'Composition', bundle.entry as e2, e2.request = create('BackboneElement') as requestPAT, requestPAT.method = 'PUT', e2.resource = create('Patient') as patient, patient.id = uuid() as uuid2, e2.fullUrl = append('https://example/Patient/', uuid2), bundle.entry as e3, e3.request = create('BackboneElement') as request, request.method = 'POST', e3.resource = create('Encounter') as encounter, encounter.id = uuid() as uuid3, e3.fullUrl = append('https://example/Encounter/', uuid3), request.url = 'Encounter', bundle.entry as e5, e5.request = create('BackboneElement') as request, request.method = 'POST', e5.resource = create('DocumentReference') as DocumentReference, DocumentReference.id = uuid() as uuid5, e5.fullUrl = append('https://example/DocumentReference/', uuid5), request.url = 'DocumentReference' then { cda then ClinicalDocumentToBundle(cda, patient, composition, encounter, bundle, DocumentReference) "cdatobundle"; cda.recordTarget as recordTarget then { recordTarget.patientRole as patient then { patient.id as id -> patient.identifier as identifier then { id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1"; id.extension as ext -> identifier.value = ext; id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s; } "record"; patient.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') or (root = '2.16.840.1.113883.2.9.4.3.7') or (root = '2.16.840.1.113883.2.9.4.3.3') or (root = '2.16.840.1.113883.2.9.4.3.17') or (root = '2.16.840.1.113883.2.9.4.3.18') or (root = '2.16.840.1.113883.2.9.2.10.4.1.1') or (root = '2.16.840.1.113883.2.9.2.20.4.1.1') or (root = '2.16.840.1.113883.2.9.2.30.4.1.1') or (root = '2.16.840.1.113883.2.9.2.41.4.1.1') or (root = '2.16.840.1.113883.2.9.2.42.4.1.1') or (root = '2.16.840.1.113883.2.9.2.50.4.1.1') or (root = '2.16.840.1.113883.2.9.2.60.4.1.1') or (root = '2.16.840.1.113883.2.9.2.70.4.1.1') or (root = '2.16.840.1.113883.2.9.2.80.4.1.1') or (root = '2.16.840.1.113883.2.9.2.90.4.1.1') or (root = '2.16.840.1.113883.2.9.2.100.4.1.1') or (root = '2.16.840.1.113883.2.9.2.110.4.1.1') or (root = '2.16.840.1.113883.2.9.2.120.4.1.1') or (root = '2.16.840.1.113883.2.9.2.130.4.1.1') or (root = '2.16.840.1.113883.2.9.2.140.4.1.1') or (root = '2.16.840.1.113883.2.9.2.150.4.1.1') or (root = '2.16.840.1.113883.2.9.2.160.4.1.1') or (root = '2.16.840.1.113883.2.9.2.170.4.1.1') or (root = '2.16.840.1.113883.2.9.2.180.4.1.1') or (root = '2.16.840.1.113883.2.9.2.190.4.1.1') or (root = '2.16.840.1.113883.2.9.2.200.4.1.1') or (root = '2.16.840.1.113883.2.9.2.10.4.1') or (root = '2.16.840.1.113883.2.9.2.20.4.1') or (root = '2.16.840.1.113883.2.9.2.30.4.1') or (root = '2.16.840.1.113883.2.9.2.41.4.1') or (root = '2.16.840.1.113883.2.9.2.42.4.1') or (root = '2.16.840.1.113883.2.9.2.50.4.1') or (root = '2.16.840.1.113883.2.9.2.60.4.1') or (root = '2.16.840.1.113883.2.9.2.70.4.1') or (root = '2.16.840.1.113883.2.9.2.80.4.1') or (root = '2.16.840.1.113883.2.9.2.90.4.1') or (root = '2.16.840.1.113883.2.9.2.100.4.1') or (root = '2.16.840.1.113883.2.9.2.110.4.1') or (root = '2.16.840.1.113883.2.9.2.120.4.1') or (root = '2.16.840.1.113883.2.9.2.130.4.1') or (root = '2.16.840.1.113883.2.9.2.140.4.1') or (root = '2.16.840.1.113883.2.9.2.150.4.1') or (root = '2.16.840.1.113883.2.9.2.160.4.1') or (root = '2.16.840.1.113883.2.9.2.170.4.1') or (root = '2.16.840.1.113883.2.9.2.180.4.1') or (root = '2.16.840.1.113883.2.9.2.190.4.1') or (root = '2.16.840.1.113883.2.9.2.200.4.1') or (root = '2.16.840.1.113883.2.9.4.3.15') then { id.extension as ext -> requestPAT.url = append('Patient?identifier=', ext) "UUID"; } "ext"; } "recPat"; } "patient"; } "ClinicalDocumentToBody"; } group ClinicalDocumentToBundle(source cda : ClinicalDocument, target patient : Patient, target composition : Composition, target encounter : Encounter, target bundle : Bundle, target DocumentReference : DocumentReference) { cda -> bundle.id = uuid() "id"; cda.id -> bundle.identifier "identifier"; cda -> bundle.type = 'transaction' "type"; cda -> bundle.timestamp = (timestamp.now()) "date"; cda then ClinicalDocumentComposition(cda, composition, patient, encounter, bundle, DocumentReference) "composition"; cda.component as component then { component.structuredBody as body then { body.component as component then { // discretizzi il primo livello di component component.section as srcSection then { srcSection.code where (code = '46241-6') -> composition.section as tgtSection then ClinicalDocumentSectionMotivoRicovero(cda, srcSection, patient, tgtSection, bundle, encounter) "motivoRicovero"; srcSection.code where (code = '47039-3') -> composition.section as tgtSection then ClinicalDocumentSectionInquadramentoClinico(cda, srcSection, patient, tgtSection, bundle, encounter) "inquadramentoClinico"; srcSection.code where (code = '8648-8') -> composition.section as tgtSection then ClinicalDocumentSectionDecorsoOspedaliero(cda, srcSection, patient, tgtSection, bundle, encounter) "DecorsoOspedaliero"; srcSection.code where (code = '55109-3') -> composition.section as tgtSection then ClinicalDocumentSectionComplicanze(cda, srcSection, patient, tgtSection, bundle, encounter) "Complicazioni"; srcSection.code where (code = '11493-4') -> composition.section as tgtSection then ClinicalDocumentSectionRiscontri(cda, srcSection, patient, tgtSection, bundle, encounter) "HospitalDischargeStudiesSummary"; srcSection.code where (code = '34104-0') -> composition.section as tgtSection then ClinicalDocumentSectionConsulenza(cda, srcSection, patient, tgtSection, bundle, encounter) "HospitalDischargeStudiesSummary"; srcSection.code where (code = '30954-2') -> composition.section as tgtSection then ClinicalDocumentSectionEsamiEseguitiRicovero(cda, srcSection, patient, tgtSection, bundle, encounter) "EsamiEseguitiDuranteilRicovero"; srcSection.code where (code = '47519-4') -> composition.section as tgtSection then ClinicalDocumentSectionProcedureEseguiteRicovero(cda, srcSection, patient, tgtSection, bundle, encounter) "HistoryOfProceduresDocument"; srcSection.code where (code = '48765-2') -> composition.section as tgtSection then ClinicalDocumentSectionAllergie(cda, srcSection, patient, tgtSection, bundle, encounter) "EsamiEseguitiDuranteIlRicovero"; srcSection.code where (code = '10160-0') -> composition.section as tgtSection then ClinicalDocumentSectionTerapiaFarmacologicaDuranteRicovero(cda, srcSection, patient, tgtSection, bundle, encounter) "TerapiaFarmacologicaAllaDimissione"; srcSection.code where (code = '11535-2') -> composition.section as tgtSection then ClinicalDocumentSectionDiagnosiDimissione(cda, srcSection, patient, tgtSection, bundle, encounter) "DiagnosiDiDimissione"; srcSection.code where (code = '18776-5') -> composition.section as tgtSection then ClinicalDocumentSectionIstruzioniFollowUp(cda, srcSection, patient, tgtSection, bundle, encounter) "DiagnosiDiDimissione"; srcSection.code where (code = '10183-2') -> composition.section as tgtSection then ClinicalDocumentSectionTerapiaDimissione(cda, srcSection, patient, tgtSection, bundle, encounter) "TerapiaFarmacologicaAllaDimissione"; }; }; } "body"; }; } // ------------------------------------------------------------------------------------------------------------------- group ClinicalDocumentSectionMotivoRicovero(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src where src.entry.exists() then { src.text as cdaText -> tgt.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; } "cdaText"; } "cText"; src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then { entry1.observation as obs then Observation(obs, patient, enc, observation, bundle) "act"; }; src where src.entry.exists().not() then { src.text as cdaText -> bundle.entry as e8, e8.request = create('BackboneElement') as request, request.method = 'POST', e8.resource = create('Observation') as Observation, Observation.id = uuid() as uuid8, e8.fullUrl = append('https://example/Observation/', uuid8), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %Observation.id) then { src -> Observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> Observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; src.code -> Observation.code; src where observation.statusCode.exists().not() then { src -> Observation.status = 'final' "status"; } "statuscode"; cdaText -> Observation.note as note then { cdaText as t -> note.text = t "reference"; } "reference"; } "cdaText"; } "where"; } group ClinicalDocumentSectionInquadramentoClinico(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id), tgt.text as fhirText then { cdaText -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; cdaText -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; src.code -> observation.code; src where observation.statusCode.exists().not() then { src -> observation.status = 'final' "status"; } "statuscode"; cdaText -> observation.note as note then { cdaText as t -> note.text = t "reference"; } "reference"; } "cdaText"; src.component as component then { component.section as section2 then { // ANAMNESI section2 -> tgt.section as sec2 then { section2.code where (code = '11329-0') -> sec2.code; section2.title as t -> sec2.title = (t.dataString); // section2.code -> sec2.code; src where src.entry.exists() then { section2.text as cdaText -> sec2.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; } "cdaText"; } "exist"; src where src.entry.exists().not() then { section2.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as condition, condition.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', sec2.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %condition.id) then { section2.code -> condition.code; src where condition.statusCode.exists().not() then { src -> condition.status = 'final' "status"; } "statuscode"; cdaText -> condition.note as note then { cdaText -> condition.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; cdaText -> condition.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; cdaText as t -> note.text = t "reference"; } "reference"; } "cdaText"; } "where"; section2.entry as entry1 then { entry1.observation as obs then { // EntryRelationship per il Problem obs.code where (code = '75326-9') then { obs -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Condition') as condition, condition.id = uuid() as uuid1, e1.fullUrl = append('https://example/Condition/', uuid1), request.url = 'Condition', sec2.entry = create('Reference') as reference, reference.reference = ('https://example/Condition/' + %condition.id) then { obs.code -> condition.category; obs -> condition.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; obs -> condition.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; obs.statusCode as status where (code = 'completed') -> condition.verificationStatus as status2 then { status -> status2.coding as status3 then { status -> status3.code = 'confirmed' "finald"; status -> status3.system = 'http://terminology.hl7.org/CodeSystem/condition-ver-status' "system"; } "st3"; } "status"; obs.effectiveTime as effective1 then { effective1 where effective1.low.exists() or effective1.high.exists() then { effective1 -> condition.onset = create('Period') as periodonset then IVLTSPeriod(effective1, periodonset) "onsetperiod"; } "ef"; } "effectivetime1"; obs.value : CD as val then { val -> condition.code = create('CodeableConcept') as ce then { val.originalText -> ce.text; val -> ce.coding as coding then { val.code as code -> coding.code = cast(code, 'string'); val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); val.displayName as display -> coding.display = cast(display, 'string'); } "coding"; } "Ce"; } "Value"; obs.entryRelationship as entriRel then { entriRel -> condition.evidence = create('BackboneElement') as evidence then { entriRel.observation as observation2 then { observation2.code as code then { code.code where (code.code = '89261-2') then { obs -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation' then { entriRel -> evidence.detail = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) "ref"; observation2.code -> observation.code; observation2 where observation.statusCode.exists().not() then { observation2 -> observation.status = 'final' "status"; } "statuscode"; observation2.text as text -> observation.note = create('Annotation') as note then { text.reference as ref -> note.text = (ref.value) "val"; } "Annontation"; obs -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; obs -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; observation2.statusCode as statusc where (code = 'completed') -> ob.status = 'final'; observation2.statusCode as statusc where (code = 'active') -> ob.status = 'registered'; observation2.statusCode as statusc where (code = 'aborted') -> ob.status = 'cancelled'; observation2.statusCode as statusc where (code = 'suspended') -> ob.status = 'partial'; observation2.value : INT as int -> ob.value = (int.value); observation2.value : BL as boolean -> ob.value = (boolean.value) "boolean"; observation2.value : CD as val then { val -> ob.value = create('CodeableConcept') as ce then { val.originalText as originalText then { originalText.reference as reference -> ce.text = reference; } "originltext"; val -> ce.coding as coding then { val.code as code -> coding.code = cast(code, 'string'); val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); val.displayName as display -> coding.display = cast(display, 'string'); val.codeSystemVersion as version -> coding.version = cast(version, 'string'); } "code"; val.translation as translation -> ce.coding as coding then { translation.code as code -> coding.code = cast(code, 'string'); translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); translation.displayName as display -> coding.display = cast(display, 'string'); translation.codeSystemVersion as version -> coding.version = cast(version, 'string'); translation.qualifier as qualifier then { qualifier.value as value -> ce.coding as coding then { value.code as code -> coding.code = cast(code, 'string'); value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); value.displayName as display -> coding.display = cast(display, 'string'); value.codeSystemVersion as version -> coding.version = cast(version, 'string'); }; }; }; } "coding"; } "val"; observation2.value : PQ as val then { val -> ob.value = create('Quantity') as quantity then { val.value as value -> quantity.value = value; val.unit as unit -> quantity.unit = unit; } "quantity"; } "valueQuantity"; observation2.value : ST as value -> ob.value = create('string'), ob.value = (value.dataString); observation2.value : CE as val then { val -> observation.value = create('CodeableConcept') as ce then { val.originalText -> ce.text; val -> ce.coding as coding then { val.code as code -> coding.code = cast(code, 'string'); val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); val.displayName as display -> coding.display = cast(display, 'string'); } "coding"; } "Ce"; } "Value"; } "obser"; } "whereDecorsoClinico"; }; } "Observation2"; } "evidence"; } "EntryRelationship1"; obs.entryRelationship as entriRel then { entriRel.observation as observation2 then { observation2.code as code then { code.code where (code.code = '33999-4') then { observation2 -> condition.clinicalStatus = create('CodeableConcept') as status then { observation2.text as text then { text.reference as refstat -> status.text = (refstat.value) "statref"; } "textstat"; observation2 -> status.coding = create('Coding') as coding then { observation2.value as value then { value.code where (value.code = 'LA16666-2') -> coding.code = 'active' "active"; value.code where (value.code = 'LA18632-2') -> coding.code = 'inactive' "inactive"; value.codeSystem as system -> coding.system = 'http://terminology.hl7.org/CodeSystem/condition-clinical' "system"; value.displayName as display -> coding.display = cast(display, 'string'); } "value1"; } "coding"; } "code"; } "whereDecorsoClinico"; } "codestatus"; } "observationstatus"; } "entryrelationshipstatus"; } "whereEntryPatologicaProssima"; } "observationcondition"; } "entry"; } "subsection1"; // ESAME PBIETTIVO section2.code where (code = '29545-1') then ClinicalDocumentSottoSectionOBS(section2, sec2, bundle, enc, patient) "esameObiettivo"; // TETAPIA FARMACOLOGICA section2.code where (code = '42346-7') then ClinicalDocumentSottoSectionMS(section2, sec2, bundle, patient, enc) "TerapiaFarmacologicaAllIngresso"; } "sec2fhir"; } "componentSec"; }; } group ClinicalDocumentSectionDecorsoOspedaliero(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id), tgt.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; src.code -> observation.code; src where observation.statusCode.exists().not() then { src -> observation.status = 'final' "status"; } "statuscode"; src -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; cdaText -> observation.note as note then { cdaText as t -> note.text = t "reference"; } "reference"; } "cdaText"; src.component as component then { component.section as section2 then { src then ClinicalDocumentSottoSectionOBS(section2, tgt, bundle, enc, patient) "Decorso"; } "1"; } "2"; } group ClinicalDocumentSectionComplicanze(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src where src.entry.exists() then { src.text as cdaText -> tgt.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; } "cdaText"; } "exist"; src where src.entry.exists().not() then { src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then { src -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; src.code -> observation.code; src where observation.statusCode.exists().not() then { src -> observation.status = 'final' "status"; } "statuscode"; cdaText -> observation.note as note then { cdaText as t -> note.text = t "reference"; } "reference"; } "cdaText"; } "where"; src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then { entry1.observation as obs then Observation(obs, patient, enc, observation, bundle) "act"; }; } group ClinicalDocumentSectionRiscontri(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id), tgt.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; src.code -> observation.code; src where observation.statusCode.exists().not() then { src -> observation.status = 'final' "status"; } "statuscode"; src -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; cdaText -> observation.note as note then { cdaText as t -> note.text = t "reference"; } "reference"; } "cdaText"; src.component as component then { component.section as section2 then { src then ClinicalDocumentSottoSectionOBS(section2, tgt, bundle, enc, patient) "Decorso"; } "1"; } "2"; } group ClinicalDocumentSectionConsulenza(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src where src.entry.exists() then { src.text as cdaText -> tgt.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; } "cdaText"; } "exist"; src where src.entry.exists().not() then { src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then { src -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; src.code -> observation.code; src where observation.statusCode.exists().not() then { src -> observation.status = 'final' "status"; } "statuscode"; cdaText -> observation.note as note then { cdaText as t -> note.text = t "reference"; } "reference"; } "cdaText"; } "where"; src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then { entry1.observation as obs then ObservationConsulenza(obs, patient, enc, observation, bundle) "act"; }; } group ClinicalDocumentSectionEsamiEseguitiRicovero(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src where src.entry.exists() then { src.text as cdaText -> tgt.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; } "cdaText"; } "exists"; src where src.entry.exists().not() then { src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then { src -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; src.code -> observation.code; src where observation.statusCode.exists().not() then { src -> observation.status = 'final' "status"; } "statuscode"; cdaText -> observation.note as note then { cdaText as t -> note.text = t "reference"; } "reference"; } "cdaText"; } "where"; src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then { entry1.observation as obs then ObservationEsamiDuranteRicovero(obs, patient, enc, observation, bundle) "act"; }; } group ClinicalDocumentSectionProcedureEseguiteRicovero(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src where src.entry.exists() then { src.text as cdaText -> tgt.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; } "cdaText"; } "exists"; src where src.entry.exists().not() then { src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Procedure') as procedure, procedure.id = uuid() as uuid1, e1.fullUrl = append('https://example/Procedure/', uuid1), request.url = 'Procedure', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Procedure/' + %procedure.id) then { src -> procedure.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> procedure.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; src -> procedure.status = 'unknown' "statuscode"; cdaText -> procedure.note as note then { cdaText as t -> note.text = t "reference"; } "reference"; } "cdaText"; } "where"; src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Procedure') as procedure, procedure.id = uuid() as uuid1, e1.fullUrl = append('https://example/Procedure/', uuid1), request.url = 'Procedure', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Procedure/' + %procedure.id) then { src -> procedure.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> procedure.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; entry1.procedure as proceduresrc then { proceduresrc.code -> procedure.code; proceduresrc.text as txt -> procedure.note as note then { txt.reference as ref -> note.text = (ref.value); }; proceduresrc where proc.statusCode.exists().not() then { proceduresrc -> procedure.status = 'unknown' "statuscode"; } "status"; proceduresrc.statusCode as statusc where (code = 'completed') -> procedure.status = 'completed'; proceduresrc.statusCode as statusc where (code = 'active') -> procedure.status = 'in-progress'; proceduresrc.statusCode as statusc where (code = 'aborted') -> procedure.status = 'stopped'; proceduresrc.statusCode as statusc where (code = 'suspended') -> procedure.status = 'on-hold'; proceduresrc.statusCode as statusc where (code = 'cancelled') -> procedure.status = 'not-done'; proceduresrc.statusCode as statusc where (code = 'held') -> procedure.status = 'on-hold'; proceduresrc.statusCode as statusc where (code = 'new') -> procedure.status = 'preparation'; proceduresrc.statusCode as statusc where (code = 'obsolete') -> procedure.status = 'entered-in-error'; proceduresrc.statusCode as statusc where (code = 'nullified') -> procedure.status = 'unknown'; proceduresrc.effectiveTime as efft -> procedure.performed = create('Period') as period then IVLTSPeriod(efft, period); proceduresrc.entryRelationship as entriRel -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', procedure.reasonReference = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then { entriRel -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; entriRel -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; entriRel.observation as obs then { obs.code -> observation.code; obs where observation.statusCode.exists().not() then { obs -> observation.status = 'final' "status"; } "statuscode"; } "ObservationValue"; } "Observation"; } "Procedure"; } "Entry"; } group ClinicalDocumentSectionAllergie(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src where src.entry.exists() then { src.text as cdaText -> tgt.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; } "cdaText"; } "exists"; src where src.entry.exists().not() then { src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('AllergyIntolerance') as allergy, allergy.id = uuid() as uuid1, e1.fullUrl = append('https://example/AllergyIntolerance/', uuid1), request.url = 'AllergyIntolerance', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/AllergyIntolerance/' + %allergy.id) then { src -> allergy.patient = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> allergy.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; src -> allergy.clinicalStatus = create('CodeableConcept') as status then { src -> status.text = 'string' "text"; src -> status.coding = create('Coding') as coding then { src -> coding.code = 'active' "active"; src -> coding.system = 'http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical' "system"; } "coding"; } "allergy"; src.code -> allergy.code; cdaText -> allergy.note as note then { cdaText as t -> note.text = t "reference"; } "reference"; } "cdaText"; } "where"; src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('AllergyIntolerance') as allergy, allergy.id = uuid() as uuid1, e1.fullUrl = append('https://example/AllergyIntolerance/', uuid1), request.url = 'AllergyIntolerance', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/AllergyIntolerance/' + %allergy.id) then { src -> allergy.patient = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> allergy.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; entry1.act as actallint then { actallint.effectiveTime as eff -> allergy.onset = create('Period') as per then IVLTSPeriod(eff, per); actallint.entryRelationship as entryact then { entryact.observation as entryobs then { entryobs.value as code then { code.code as code1 -> allergy.type = translate(code1, '#AllergyTypeMap', 'code') "type"; code.code as code2 -> allergy.category = translate(code2, '#AllergyCategoryMap', 'code') "category"; } "code"; entryobs.participant as partic then { partic.participantRole as pratRole then { pratRole.playingEntity as pratent then { pratent -> allergy.reaction = create('BackboneElement') as reaction then { pratent.code -> reaction.substance "subs"; entryobs.entryRelationship as entryobs1 where (typeCode = 'MFST') then { entryobs1.observation as entobs then { entobs.effectiveTime as eff then { eff.low as l -> reaction.onset = create('dateTime') as start then TSDateTime(l, start) "val"; } "eff"; entobs.value -> reaction.manifestation "manifest"; } "observ"; } "entry"; } "cod"; } "react"; } "pratentit"; } "PratRole"; entryobs.entryRelationship as entryobs2 then { entryobs2.observation as entobs then { entobs.code as code where (code = 'SEV') then { entobs.value as value then { value.code where (value.code = 'M') -> allergy.criticality = 'unable-to-assess' "active"; value.code where (value.code = 'L') -> allergy.criticality = 'low' "active"; value.code where (value.code = 'H') -> allergy.criticality = 'high' "active"; } "entobs"; } "sev"; } "severity"; } "observ"; entryobs.entryRelationship as entryobs3 then { entryobs3.observation as entobs then { entobs.code as code where (code = '33999-4') then { entobs -> allergy.clinicalStatus = create('CodeableConcept') as status then { entobs -> status.coding = create('Coding') as coding then { entobs.value as value then { value.code where (value.code = 'LA16666-2') -> coding.code = 'active' "active"; value.code where (value.code = 'LA18632-2') -> coding.code = 'inactive' "active"; value.codeSystem as system -> coding.system = 'http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical' "system"; value.displayName as display -> coding.display = cast(display, 'string'); } "value1"; } "coding"; } "clinicalStatus"; } "stat"; } "obobs3serv"; } "entry3"; entryobs.entryRelationship as entryobs4 then { entryobs4.act as entact then { entact.text as actext then { actext.reference as reftxt -> allergy.note = create('BackboneElement') as note then { reftxt as ref -> note.text = (ref.value) "notxt"; } "notetxt"; } "txtact"; } "obobs4serv"; } "entry4"; } "partic"; }; }; } "allergy"; } group ClinicalDocumentSectionDiagnosiDimissione(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src where src.entry.exists() then { src.text as cdaText -> tgt.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; } "cdaText"; } "exists"; src where src.entry.exists().not() then { src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then { src -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; src.code -> observation.code; src where observation.statusCode.exists().not() then { src -> observation.status = 'final' "status"; } "statuscode"; cdaText -> observation.note as note then { cdaText as t -> note.text = t "reference"; } "reference"; } "cdaText"; } "where"; src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then { entry1.observation as obs then Observation(obs, patient, enc, observation, bundle) "act"; }; } group ClinicalDocumentSectionIstruzioniFollowUp(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src.text as cdaText -> tgt.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; } "cdaText"; src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('CarePlan') as carePlan, carePlan.id = uuid() as uuid1, e1.fullUrl = append('https://example/CarePlan/', uuid1), request.url = 'CarePlan', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/CarePlan/' + %carePlan.id) then { cdaText -> carePlan.note as note then { cdaText as t -> note.text = t "reference"; } "reference"; src -> carePlan.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> carePlan.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; src -> carePlan.status = 'active' "status"; src -> carePlan.intent = 'order' "intent"; } "entry"; } group ClinicalDocumentSectionTerapiaFarmacologicaDuranteRicovero(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src where src.entry.exists() then { src.text as cdaText -> tgt.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; } "cdaText"; } "exists"; src where src.entry.exists().not() then { src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('MedicationAdministration') as medicationAdm, medicationAdm.id = uuid() as uuid1, e1.fullUrl = append('https://example/MedicationAdministration/', uuid1), request.url = 'MedicationAdministration', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/MedicationAdministration/' + %medicationAdm.id) then { cdaText -> medicationAdm.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; cdaText -> medicationAdm.context = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; cdaText -> medicationAdm.medication = create('CodeableConcept') as codecon then { cdaText -> codecon.text = 'string' "text"; } "code"; src -> medicationAdm.effective = create('Period') as period then { src -> period.start = (start.now()) "low"; src -> period.end = (end.now()) "high"; } "Period"; src where sub.statusCode.exists().not() then { src -> medicationAdm.status = 'completed' "status"; } "statuscode"; cdaText -> medicationAdm.note as note then { cdaText as t -> note.text = t "reference"; } "reference"; } "cdaText"; } "where"; src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('MedicationAdministration') as medicationAdm, medicationAdm.id = uuid() as uuid1, e1.fullUrl = append('https://example/MedicationAdministration/', uuid1), request.url = 'MedicationAdministration', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/MedicationAdministration/' + %medicationAdm.id) then { entry1 -> medicationAdm.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; entry1 -> medicationAdm.context = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; entry1.substanceAdministration as sa then { sa.text as tx -> medicationAdm.note as note then { sa.performer as performer -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'PUT', e1.resource = create('Practitioner') as practitioner then { performer.time as ti -> note.time = (ti.value); performer.assignedEntity as assEnty then { assEnty -> practitioner.meta as meta then { assEnty -> meta.tag = create('Coding') as coding then { assEnty -> coding.system = 'http://algoritmodiscoring' "system"; assEnty -> coding.code = 'ClinicalDocument/body/TerapiaFarmacologicaRicovero/performer' "code"; } "coding"; } "meta"; assEnty.id as id -> practitioner.identifier as identifier then { id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1"; id.extension as ext -> identifier.value = ext; id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s; id.root as r then { id.extension as ext -> practitioner.id = (r + '-' + ext) as uuid2, e1.fullUrl = append('https://example/Practitioner/', uuid2), request.url = 'Practitioner', medicationAdm.performer as perf, perf.actor = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut"; } "r"; } "identifier"; assEnty.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then { id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID"; } "2"; assEnty.id as id where (root != '2.16.840.1.113883.2.9.4.3.2') then { id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID"; } "diverso"; assEnty.assignedPerson as assi then { assi.name -> practitioner.name; } "assi"; } "assEntity"; } "perf"; tx.reference as ref -> note.text = (ref.value); } "tx"; sa.statusCode as st -> medicationAdm.status = (st.code); sa.effectiveTime as eff -> medicationAdm.effective = create('Period') as period then IVLTSPeriod(eff, period) "period"; sa -> medicationAdm.dosage as dos then { sa.routeCode -> dos.route; } "dos"; sa -> medicationAdm.dosage as dos then { sa.approachSiteCode -> dos.site; } "dos"; sa.doseQuantity as doseQuant -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('MedicationRequest') as medicationRq, medicationRq.id = uuid() as uuid1, e1.fullUrl = append('https://example/MedicationRequest/', uuid1), request.url = 'MedicationRequest', medicationAdm.request = create('Reference') as reference, reference.reference = ('https://example/MedicationRequest/' + %medicationRq.id) then { doseQuant -> medicationRq.dosageInstruction = create('Dosage') as dosageInstruction then { doseQuant.originalText as ot then { ot.reference -> dosageInstruction.text; } "ot"; doseQuant -> dosageInstruction.doseAndRate as dosageRate then { doseQuant -> dosageRate.dose = create('Range') as d then { doseQuant -> d.low = create('SimpleQuantity') as l then { doseQuant.low as lo -> l.value = (lo.value); doseQuant.low as lo -> l.unit = (lo.unit); } "low"; doseQuant -> d.high = create('SimpleQuantity') as h then { doseQuant.high as hi -> h.value = (hi.value); doseQuant.high as hi -> h.unit = (hi.unit); } "low"; } "d"; } "dosageRate"; } "Dosage"; sa -> medicationRq.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; sa -> medicationRq.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; sa -> medicationRq.status = 'active' "status"; sa -> medicationRq.intent = 'order' "intent"; sa.rateQuantity as rateQuantity -> medicationRq.dosageInstruction = create('Dosage') as dosageInstruction1 then { rateQuantity.originalText as ot then { ot.reference -> dosageInstruction1.text; } "ot"; rateQuantity -> dosageInstruction1.doseAndRate as dosageRate then { rateQuantity -> dosageRate.rate = create('Range') as d then { rateQuantity -> d.low = create('SimpleQuantity') as l then { rateQuantity.low as lo -> l.value = (lo.value); rateQuantity.low as lo -> l.unit = (lo.unit); } "low"; rateQuantity -> d.high = create('SimpleQuantity') as h then { rateQuantity.high as hi -> h.value = (hi.value); rateQuantity.high as hi -> h.unit = (hi.unit); } "low"; } "d"; } "dosageRate"; } "Dosage"; sa -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Medication') as medication, medication.id = uuid() as uuid1, e1.fullUrl = append('https://example/Medication/', uuid1), request.url = 'Medication', medicationAdm.medication = create('Reference') as reference, reference.reference = ('https://example/Medication/' + %medication.id) then { sa -> medicationRq.medication = create('Reference') as reference, reference.reference = ('https://example/Medication/' + %medication.id) "reference"; sa.administrationUnitCode -> medication.form; sa.consumable as consumable then { consumable.manufacturedProduct as manufac then { manufac.manufacturedMaterial as manuprod then { manuprod.code -> medication.code; } "manufactproduct"; } "manufac"; }; sa.entryRelationship as entryRR then { entryRR.observation as observation then { observation.code where displayName = 'Grammatura' -> medication.ingredient as ingredient then { sa.consumable as consumable then { consumable.manufacturedProduct as manufacturedProduct then { manufacturedProduct.manufacturedMaterial as manufacturedMaterial then { manufacturedMaterial.code as code -> ingredient.item = create('CodeableConcept') as value then CECodeableConcept(code, value) "CE"; } "material"; } "product"; }; observation.value as value -> ingredient.strength as strength then { value -> strength.numerator as numerator then { value -> numerator.value = (value.value) "valueN"; } "numerator"; value -> strength.denominator as denominator then { value -> denominator.value = 1 "valueD"; } "denominator"; } "strenght"; } "ingredient"; observation.code where displayName = 'Quantità nella Confezione' then { observation.value as value -> medication.amount as amount then { value -> amount.numerator as numerator then { value -> numerator.value = (value.value) "valueN"; } "numerator"; value -> amount.denominator as denominator then { value -> denominator.value = 1 "valueD"; } "denominator"; } "amount"; } "quantita"; } "obs"; } "entryRr"; } "medication"; sa.entryRelationship as entryRelationship then { entryRelationship.supply as sup -> medicationRq.dispenseRequest as dispreq then { sup -> dispreq.quantity = create('SimpleQuantity') as quantity then { sup.quantity as q -> quantity.value = (q.value); } "quantity"; } "sub"; } "entryR"; sa.participant as participant then { participant.time as t -> medicationRq.authoredOn = (t.value); participant.participantRole as participantR -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'PUT', e1.resource = create('Practitioner') as practitioner then { participantR -> practitioner.meta as meta then { participantR -> meta.tag = create('Coding') as coding then { participantR -> coding.system = 'http://algoritmodiscoring' "system"; participantR -> coding.code = 'ClinicalDocument/body/TerapiaFarmacologicaRicovero/participant' "code"; } "coding"; } "meta"; participantR.id as id -> practitioner.identifier as identifier then { id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1"; id.extension as ext -> identifier.value = ext; id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s; id.root as r then { id.extension as ext -> practitioner.id = (r + '-' + ext) as uuid2, e1.fullUrl = append('https://example/Practitioner/', uuid2), request.url = append('Practitioner/', uuid1), medicationRq.requester = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut"; } "r"; } "identifier"; participantR.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then { id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID"; } "2"; participantR.playingEntity as assi then { assi.name -> practitioner.name; } "assi"; } "perf"; sa.effectiveTime : EIVL as eff -> medicationRq.dosageInstruction = create('Dosage') as dosage then { eff -> dosage.timing = create('Timing') as timing then { eff -> timing.repeat as rep then { eff.event as ev -> rep.where = (ev.code); } "rep"; } "timing"; } "period"; sa.effectiveTime : TS as eff -> medicationRq.dosageInstruction = create('Dosage') as dosage, dosage.timing = create('Timing') as timing, timing.event = (eff.value) "tim"; sa.effectiveTime : PIVL_TS as eff -> medicationAdm.dosage = create('BackboneElement') as dosage then { eff -> dosage.rate = create('Ratio') as ratio then { eff -> ratio.numerator = create('Quantity') as quan then { eff.period as per -> quan.value = (per.value); eff.period as per -> quan.unit = (per.unit); } "quanti"; eff -> ratio.denominator = create('Quantity') as quan then { eff.period -> quan.value = '1'; eff.period as per -> quan.unit = (per.unit); } "quanti"; } "ratio"; } "eff"; } "Medicationrequest"; } "sa"; } "entry"; } "sa"; } group ClinicalDocumentSottoSectionOBS(source src : Section, target tgt, target bundle : Bundle, target enc : Encounter, target patient : Patient) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id), tgt.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; src.code -> observation.code; src -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; src where observation.statusCode.exists().not() then { src -> observation.status = 'final' "status"; } "statuscode"; cdaText -> observation.note as note then { cdaText as t -> note.text = t "reference"; } "reference"; } "cdaText"; } group ClinicalDocumentSottoSectionMS(source src : Section, target tgt, target bundle : Bundle, target patient : Patient, target enc : Encounter) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('MedicationStatement') as Medicationstatement, Medicationstatement.id = uuid() as uuid1, e1.fullUrl = append('https://example/MedicationStatement/', uuid1), request.url = 'MedicationStatement', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/MedicationStatement/' + %Medicationstatement.id), tgt.text as fhirText then { cdaText -> Medicationstatement.note as note then { cdaText as t -> note.text = t "reference"; cdaText as t -> Medicationstatement.medication = create('CodeableConcept') as medication, medication.text = t "text"; } "reference"; src -> Medicationstatement.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> Medicationstatement.status = 'unknown' "status"; } "cdaText"; } group Observation(source obs : Observation, target patient : Patient, target encounter : Encounter, target ob : Observation, target bundle : Bundle) { obs -> ob.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; obs -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; obs.code -> ob.code; obs.statusCode as statusc where (code = 'completed') -> ob.status = 'final'; obs.statusCode as statusc where (code = 'active') -> ob.status = 'registered'; obs.statusCode as statusc where (code = 'aborted') -> ob.status = 'cancelled'; obs.statusCode as statusc where (code = 'suspended') -> ob.status = 'partial'; obs where obs.statusCode.exists().not() then { obs -> ob.status = 'final' "status"; } "statuscode"; obs.effectiveTime as effectiveTime -> ob.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value2"; obs where effectiveTime.low.exists() or effectiveTime.high.exists() then { obs.effectiveTime as eff -> ob.effective = create('Period') as period then IVLTSPeriod(eff, period) "value3"; } "where"; obs.value : INT as int -> ob.value = (int.value); obs.value : BL as boolean -> ob.value = (boolean.value) "boolean"; obs.value : CD as val then { val -> ob.value = create('CodeableConcept') as ce then { val.originalText -> ce.text; val -> ce.coding as coding then { val.code as code -> coding.code = cast(code, 'string'); val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); val.displayName as display -> coding.display = cast(display, 'string'); } "code"; val.translation as translation -> ce.coding as coding then { translation.code as code -> coding.code = cast(code, 'string'); translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); translation.displayName as display -> coding.display = cast(display, 'string'); translation.qualifier as qualifier then { qualifier.value as value -> ce.coding as coding then { value.code as code -> coding.code = cast(code, 'string'); value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); value.displayName as display -> coding.display = cast(display, 'string'); }; }; }; } "coding"; } "val"; obs.value : CE as val then { val -> ob.value = create('CodeableConcept') as ce then { val.originalText -> ce.text; val -> ce.coding as coding then { val.code as code -> coding.code = cast(code, 'string'); val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); val.displayName as display -> coding.display = cast(display, 'string'); } "code"; val.translation as translation -> ce.coding as coding then { translation.code as code -> coding.code = cast(code, 'string'); translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); translation.displayName as display -> coding.display = cast(display, 'string'); translation.qualifier as qualifier then { qualifier.value as value -> ce.coding as coding then { value.code as code -> coding.code = cast(code, 'string'); value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); value.displayName as display -> coding.display = cast(display, 'string'); }; }; }; } "coding"; } "val"; obs.value : PQ as val then { val -> ob.value = create('Quantity') as quantity then { val.value as value -> quantity.value = value; val.unit as unit -> quantity.unit = unit; } "quantity"; } "valueQuantity"; obs.value : ST as value -> ob.value = create('string'), ob.value = (value.dataString); obs.interpretationCode -> ob.interpretation; obs.methodCode -> ob.method; obs.referenceRange as refRange -> ob.referenceRange = create('BackboneElement') as ref then { refRange.observationRange as obsRange -> ref.low = create('SimpleQuantity') as Low then { obsRange.value : IVL_PQ as v then { v.low as l1 then { l1.value as decValue -> Low.value = decValue; l1.unit as Unit -> Low.unit = Unit; } "decValue"; } "IVLPQ"; } "obsRange"; } "refRange"; } group ObservationConsulenza(source obs : Observation, target patient : Patient, target encounter : Encounter, target ob : Observation, target bundle : Bundle) { obs -> ob.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; obs -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; obs.code -> ob.code; obs.statusCode as statusc where (code = 'completed') -> ob.status = 'final'; obs.statusCode as statusc where (code = 'active') -> ob.status = 'registered'; obs.statusCode as statusc where (code = 'aborted') -> ob.status = 'cancelled'; obs.statusCode as statusc where (code = 'suspended') -> ob.status = 'partial'; obs where obs.statusCode.exists().not() then { obs -> ob.status = 'final' "status"; } "statuscode"; obs.effectiveTime as effectiveTime -> ob.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value2c"; obs where effectiveTime.low.exists() or effectiveTime.high.exists() then { obs.effectiveTime as eff -> ob.effective = create('Period') as period then IVLTSPeriod(eff, period) "value3c"; } "where"; obs.value : INT as int -> ob.value = (int.value); obs.value : BL as boolean -> ob.value = (boolean.value) "boolean"; obs.value : CE as val then { val -> ob.value = create('CodeableConcept') as ce then { val.originalText as originalText then { originalText.reference as reference -> ce.text = reference; } "originltext"; val -> ce.coding as coding then { val.code as code -> coding.code = cast(code, 'string'); val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); val.displayName as display -> coding.display = cast(display, 'string'); val.codeSystemVersion as version -> coding.version = cast(version, 'string'); } "code"; val.translation as translation -> ce.coding as coding then { translation.code as code -> coding.code = cast(code, 'string'); translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); translation.displayName as display -> coding.display = cast(display, 'string'); translation.codeSystemVersion as version -> coding.version = cast(version, 'string'); translation.qualifier as qualifier then { qualifier.value as value -> ce.coding as coding then { value.code as code -> coding.code = cast(code, 'string'); value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); value.displayName as display -> coding.display = cast(display, 'string'); value.codeSystemVersion as version -> coding.version = cast(version, 'string'); }; }; }; } "coding"; } "val"; obs.value : CD as val then { val -> ob.value = create('CodeableConcept') as ce then { val.originalText -> ce.text; val -> ce.coding as coding then { val.code as code -> coding.code = cast(code, 'string'); val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); val.displayName as display -> coding.display = cast(display, 'string'); } "code"; val.translation as translation -> ce.coding as coding then { translation.code as code -> coding.code = cast(code, 'string'); translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); translation.displayName as display -> coding.display = cast(display, 'string'); translation.qualifier as qualifier then { qualifier.value as value -> ce.coding as coding then { value.code as code -> coding.code = cast(code, 'string'); value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); value.displayName as display -> coding.display = cast(display, 'string'); }; }; }; } "coding"; } "val"; obs.value : PQ as val then { val -> ob.value = create('Quantity') as quantity then { val.value as value -> quantity.value = value; val.unit as unit -> quantity.unit = unit; } "quantity"; } "valueQuantity"; obs.value : ST as value -> ob.value = create('string'), ob.value = (value.dataString); obs -> ob.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; obs -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; obs.interpretationCode -> ob.interpretation; obs.methodCode -> ob.method; obs.referenceRange as refRange -> ob.referenceRange = create('BackboneElement') as ref then { refRange.observationRange as obsRange -> ref.low = create('SimpleQuantity') as Low then { obsRange.value : IVL_PQ as v then { v.low as l1 then { l1.value as decValue -> Low.value = decValue; l1.unit as Unit -> Low.unit = Unit; } "decValue"; } "IVLPQ"; } "obsRange"; } "refRange"; obs.performer as performer -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'PUT', e1.resource = create('Practitioner') as practitioner, practitioner.id = uuid() as uuid1 then { performer.assignedEntity as assEntity then { assEntity -> practitioner.meta as meta then { assEntity -> meta.tag = create('Coding') as coding then { assEntity -> coding.system = 'http://algoritmodiscoring' "system"; assEntity -> coding.code = 'ClinicalDocument/body/Consulenza/performer' "code"; } "coding"; } "meta"; assEntity.id as id -> practitioner.identifier as identifier then { id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1"; id.extension as ext -> identifier.value = ext; id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s; id.root as r then { id.extension as ext -> practitioner.id = (r + '-' + ext) as uuid2, e1.fullUrl = append('https://example/Practitioner/', uuid2), ob.performer = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut"; } "r"; } "identifier"; assEntity.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then { id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID"; } "2"; assEntity.assignedPerson as assi then { assi.name -> practitioner.name; } "assi"; } "assEntity"; } "perf"; obs.participant as participant -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('ServiceRequest') as serviceRequest, serviceRequest.id = uuid() as uuid1, e1.fullUrl = append('https://example/ServiceRequest/', uuid1), request.url = 'ServiceRequest', ob.basedOn = create('Reference') as reference, reference.reference = ('https://example/ServiceRequest/' + %serviceRequest.id) then { participant.time as t -> serviceRequest.authoredOn = (t.value); obs -> serviceRequest.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; obs -> serviceRequest.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; obs -> serviceRequest.status = 'active' "status"; obs -> serviceRequest.intent = 'order' "intent"; participant.participantRole as participantRole -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'PUT', e1.resource = create('Practitioner') as practitioner then { participantRole -> practitioner.meta as meta then { participantRole -> meta.tag = create('Coding') as coding then { participantRole -> coding.system = 'http://algoritmodiscoring' "system"; participantRole -> coding.code = 'ClinicalDocument/body/Consulenza/participant' "code"; } "coding"; } "meta"; participantRole.id as id -> practitioner.identifier as identifier then { id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1"; id.extension as ext -> identifier.value = ext; id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s; id.root as r then { id.extension as ext -> practitioner.id = (r + '-' + ext) as uuid3, e1.fullUrl = append('https://example/Practitioner/', uuid3), serviceRequest.performer = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut"; } "r"; } "identifier"; participantRole.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then { id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID"; } "2"; participantRole.playingEntity as pe then { pe.name -> practitioner.name; } "pe"; }; }; } group ObservationEsamiDuranteRicovero(source obs : Observation, target patient : Patient, target encounter : Encounter, target ob : Observation, target bundle : Bundle) { obs -> ob.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; obs -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; obs.code -> ob.code; obs.statusCode as statusc where (code = 'completed') -> ob.status = 'final'; obs.statusCode as statusc where (code = 'active') -> ob.status = 'registered'; obs.statusCode as statusc where (code = 'aborted') -> ob.status = 'cancelled'; obs.statusCode as statusc where (code = 'suspended') -> ob.status = 'partial'; obs where obs.statusCode.exists().not() then { obs -> ob.status = 'final' "status"; } "statuscode"; obs.effectiveTime as effectiveTime -> ob.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value2r"; obs where effectiveTime.low.exists() or effectiveTime.high.exists() then { obs.effectiveTime as eff -> ob.effective = create('Period') as period then IVLTSPeriod(eff, period) "value3r"; } "where"; obs.value : INT as int -> ob.value = (int.value); obs.value : BL as boolean -> ob.value = (boolean.value) "boolean"; obs.value : CE as val then { val -> ob.value = create('CodeableConcept') as ce then { val.originalText as originalText then { originalText.reference as reference -> ce.text = reference; } "originltext"; val -> ce.coding as coding then { val.code as code -> coding.code = cast(code, 'string'); val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); val.displayName as display -> coding.display = cast(display, 'string'); val.codeSystemVersion as version -> coding.version = cast(version, 'string'); } "code"; val.translation as translation -> ce.coding as coding then { translation.code as code -> coding.code = cast(code, 'string'); translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); translation.displayName as display -> coding.display = cast(display, 'string'); translation.codeSystemVersion as version -> coding.version = cast(version, 'string'); translation.qualifier as qualifier then { qualifier.value as value -> ce.coding as coding then { value.code as code -> coding.code = cast(code, 'string'); value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); value.displayName as display -> coding.display = cast(display, 'string'); value.codeSystemVersion as version -> coding.version = cast(version, 'string'); }; }; }; } "coding"; } "val"; obs.value : CD as val then { val -> ob.value = create('CodeableConcept') as ce then { val.originalText -> ce.text; val -> ce.coding as coding then { val.code as code -> coding.code = cast(code, 'string'); val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); val.displayName as display -> coding.display = cast(display, 'string'); } "code"; val.translation as translation -> ce.coding as coding then { translation.code as code -> coding.code = cast(code, 'string'); translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); translation.displayName as display -> coding.display = cast(display, 'string'); translation.qualifier as qualifier then { qualifier.value as value -> ce.coding as coding then { value.code as code -> coding.code = cast(code, 'string'); value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); value.displayName as display -> coding.display = cast(display, 'string'); }; }; }; } "coding"; } "val"; obs.value : PQ as val then { val -> ob.value = create('Quantity') as quantity then { val.value as value -> quantity.value = value; val.unit as unit -> quantity.unit = unit; } "quantity"; } "valueQuantity"; obs.value : ST as value -> ob.value = create('string'), ob.value = (value.dataString); obs -> ob.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; obs -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; obs.interpretationCode -> ob.interpretation; obs.methodCode -> ob.method; obs.effectiveTime as eff -> ob.effective = create('Period') as per then IVLTSPeriod(eff, per); obs.referenceRange as refRange -> ob.referenceRange = create('BackboneElement') as ref then { refRange.observationRange as obsRange -> ref.low = create('SimpleQuantity') as Low then { obsRange.value : IVL_PQ as v then { v.low as l1 then { l1.value as decValue -> Low.value = decValue; l1.unit as Unit -> Low.unit = Unit; } "decValue"; } "IVLPQ"; } "obsRange"; } "refRange"; obs.performer as performer -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'PUT', e1.resource = create('Practitioner') as practitioner, practitioner.id = uuid() as uuid1 then { performer.assignedEntity as assEntity then { assEntity -> practitioner.meta as meta then { assEntity -> meta.tag = create('Coding') as coding then { assEntity -> coding.system = 'http://algoritmodiscoring' "system"; assEntity -> coding.code = 'ClinicalDocument/body/EsamiDuranteRicovero/performer' "code"; } "coding"; } "meta"; assEntity.id as id -> practitioner.identifier as identifier then { id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1"; id.extension as ext -> identifier.value = ext; id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s; id.root as r then { id.extension as ext -> practitioner.id = (r + '-' + ext) as uuid2, e1.fullUrl = append('https://example/Practitioner/', uuid2), ob.performer = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut"; } "r"; } "identifier"; assEntity.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then { id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID"; } "2"; assEntity.assignedPerson as assi then { assi.name -> practitioner.name; } "assi"; } "assEntity"; } "perf"; obs.participant as participant -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('ServiceRequest') as serviceRequest, serviceRequest.id = uuid() as uuid1, e1.fullUrl = append('https://example/ServiceRequest/', uuid1), request.url = 'ServiceRequest', ob.basedOn = create('Reference') as reference, reference.reference = ('https://example/ServiceRequest/' + %serviceRequest.id) then { participant.time as t -> serviceRequest.authoredOn = (t.value); obs -> serviceRequest.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; obs -> serviceRequest.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; obs -> serviceRequest.status = 'active' "status"; obs -> serviceRequest.intent = 'order' "intent"; participant.participantRole as participantRole -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'PUT', e1.resource = create('Practitioner') as practitioner then { participantRole -> practitioner.meta as meta then { participantRole -> meta.tag = create('Coding') as coding then { participantRole -> coding.system = 'http://algoritmodiscoring' "system"; participantRole -> coding.code = 'ClinicalDocument/body/EsamiDuranteRicovero/participant' "code"; } "coding"; } "meta"; participantRole.id as id -> practitioner.identifier as identifier then { id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1"; id.extension as ext -> identifier.value = ext; id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s; id.root as r then { id.extension as ext -> practitioner.id = (r + '-' + ext) as uuid3, e1.fullUrl = append('https://example/Practitioner/', uuid3), serviceRequest.performer = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut"; } "r"; } "identifier"; participantRole.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then { id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID"; } "2"; participantRole.playingEntity as pe then { pe.name -> practitioner.name; } "pe"; }; }; } group periodTiming(source effectiveTime : PIVL_TS, target timing : Timing) { effectiveTime -> timing.repeat as r then { effectiveTime.period as p -> r.period = (p.value); effectiveTime.period as p -> r.periodUnit = (p.unit); } "repeat"; } // --------------------------------------------------------------------------------------- group Act(source cda : Act, target pat : Patient, target ac : DiagnosticReport, target enc : Encounter, target bundle : Bundle) { cda.code -> ac.code; cda.statusCode as statusc where (code = 'completed') -> ob.status = 'final'; cda.statusCode as statusc where (code = 'active') -> ob.status = 'registered'; cda.statusCode as statusc where (code = 'aborted') -> ob.status = 'cancelled'; cda.statusCode as statusc where (code = 'suspended') -> ob.status = 'partial'; cda.effectiveTime as effectiveTime -> ac.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value2a"; obs where effectiveTime.low.exists() or effectiveTime.high.exists() then { cda.effectiveTime as eff -> ac.effective = create('Period') as period then IVLTSPeriod(eff, period) "value3a"; } "where"; cda -> ac.subject = create('Reference') as reference, reference.reference = ('https://example/' + %pat.id) "reference"; cda -> ac.encounter = create('Reference') as reference, reference.reference = ('https://example/' + %enc.id) "reference"; cda.participant as part -> enc.participant as participant then { part -> participant.type as type then { part -> type.coding as coding then { part -> coding.code = (part.typeCode) "codice"; part -> coding.system = 'http://terminology.hl7.org/CodeSystem/v3-ParticipationType' "system"; } "codeType"; } "type"; part.participantRole as participantRole -> participant.individual = create('Reference') as reference then { participantRole -> bundle.entry as e, e.request = create('BackboneElement') as request, request.method = 'PUT', e.resource = create('Practitioner') as practitioner, practitioner.id = uuid() as uuid1, e.fullUrl = append('https://example/Practitioner/', uuid1), reference.reference = ('https://example/Practitioner/' + %practitioner.id) then { participantRole -> practitioner.meta as meta then { participantRole -> meta.tag = create('Coding') as coding then { participantRole -> coding.system = 'http://algoritmodiscoring' "system"; participantRole -> coding.code = 'ClinicalDocument/body/Act/participant' "code"; } "coding"; } "meta"; participantRole.id as id -> practitioner.identifier as identifier then { id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1"; id.extension as ext -> identifier.value = ext then { participantRole -> request.url = append('Practitioner?identifier=', ext) "UUID"; } "ext"; id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s; } "identifier"; participantRole.playingEntity as playingEntity then { playingEntity.name -> practitioner.name; }; } "participanRoleBund"; }; }; cda.entryRelationship as entryRelationship then { entryRelationship.observation as observation -> bundle.entry as e, e.request = create('BackboneElement') as request, request.method = 'POST', e.resource = create('Observation') as obs, obs.id = uuid() as uuid2, e.fullUrl = append('https://example/Observation/', uuid2), request.url = append('Observation/', uuid2), ac.result = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs.id) then Observation(observation, pat, enc, obs, bundle) "OBS"; }; } group ClinicalDocumentSectionTerapiaDimissione(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src where src.entry.exists() then { src.text as cdaText -> tgt.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; } "cdaText"; } "exist"; src where src.entry.exists().not() then { src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('MedicationRequest') as medicationRq, medicationRq.id = uuid() as uuid1, e1.fullUrl = append('https://example/MedicationRequest/', uuid1), request.url = 'MedicationRequest', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/MedicationRequest/' + %medicationRq.id) then { src -> medicationRq.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> medicationRq.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; src -> medicationRq.status = 'active' "status"; src -> medicationRq.intent = 'order' "intent"; cdaText -> medicationRq.medication = create('CodeableConcept') as codecon then { cdaText -> codecon.text = 'string' "text"; } "code"; cdaText -> medicationRq.note as note then { cdaText as t -> note.text = t "reference"; } "reference"; } "cdaText"; } "where"; src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('MedicationRequest') as medicationRq, medicationRq.id = uuid() as uuid1, e1.fullUrl = append('https://example/MedicationRequest/', uuid1), request.url = 'MedicationRequest', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/MedicationRequest/' + %medicationRq.id) then { src -> medicationRq.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> medicationRq.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; src -> medicationRq.status = 'active' "status"; src -> medicationRq.intent = 'order' "intent"; entry1.substanceAdministration as substract then { substract.consumable as cons then { cons.manufacturedProduct as man1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Medication') as medication, medication.id = uuid() as uuid1, e1.fullUrl = append('https://example/Medication/', uuid1), request.url = 'Medication', medicationRq.medication = create('Reference') as medref, medref.reference = ('https://example/Medication/' + %medication.id) then { man1.manufacturedMaterial as mm then { mm.code -> medication.code; } "mm"; substract.administrationUnitCode -> medication.form; substract.entryRelationship as entryR then { entryR.observation as observation then { observation.code where displayName = 'Grammatura' -> medication.ingredient as ingredient then { substract.consumable as consumable then { consumable.manufacturedProduct as manufacturedProduct then { manufacturedProduct.manufacturedMaterial as manufacturedMaterial then { manufacturedMaterial.code as code -> ingredient.item = create('CodeableConcept') as value then CECodeableConcept(code, value) "CE"; } "material"; } "product"; }; observation.value as value -> ingredient.strength as strength then { value -> strength.numerator as numerator then { value -> numerator.value = (value.value) "valueN"; } "numerator"; value -> strength.denominator as denominator then { value -> denominator.value = 1 "valueD"; } "denominator"; } "strenght"; } "ingredient"; observation.code where displayName = 'Quantità nella Confezione' then { observation.value as value -> medication.amount as amount then { value -> amount.numerator as numerator then { value -> numerator.value = (value.value) "valueN"; } "numerator"; value -> amount.denominator as denominator then { value -> denominator.value = 1 "valueD"; } "denominator"; } "amount"; } "quantita"; } "obs"; } "entryR"; substract.entryRelationship as entryRelationship then { entryRelationship.supply as sup -> medicationRq.dispenseRequest as dispreq then { sup -> dispreq.quantity = create('SimpleQuantity') as quantity then { sup.quantity as q -> quantity.value = (q.value); } "quantity"; } "sub"; } "entry"; } "man1"; } "cons"; substract.text as tx -> medicationRq.note as note then { tx.reference as ref -> note.text = (ref.value); } "tx"; substract.statusCode as st -> medicationRq.status = (st.code); substract.effectiveTime : IVL_TS as eff -> medicationRq.dosageInstruction = create('Dosage') as dosage then { eff -> dosage.timing = create('Timing') as timing then { eff -> timing.repeat as rep then { eff -> rep.bounds = create('Period') as period then IVLTSPeriod(eff, period) "period"; } "rep"; } "timing"; } "period"; substract.effectiveTime : EIVL_TS as eff -> medicationRq.dosageInstruction = create('Dosage') as dosage then { eff -> dosage.timing = create('Timing') as timing then { eff -> timing.repeat as rep then { eff.event as ev -> rep.when = (ev.code); } "rep"; } "timing"; } "period"; substract.effectiveTime : IVL_TS as eff -> medicationRq.dosageInstruction = create('Dosage') as dosage, dosage.timing = create('Timing') as timing, timing.event = (eff.value) "tim"; substract.effectiveTime : PIVL_TS as eff -> medicationRq.dosageInstruction = create('Dosage') as dosage then { eff -> dosage.timing = create('Timing') as timing then periodTiming(eff, timing) "cod"; } "eff"; substract -> medicationRq.dosageInstruction = create('Dosage') as dosage then { substract.routeCode -> dosage.route; } "dosage"; substract -> medicationRq.dosageInstruction = create('Dosage') as dosage then { substract.approachSiteCode -> dosage.site; } "dosage"; substract.doseQuantity as doseQuant -> medicationRq.dosageInstruction = create('Dosage') as dosageInstruction then { doseQuant.originalText as ot then { ot.reference -> dosageInstruction.text; } "ot"; doseQuant -> dosageInstruction.doseAndRate as dosageRate then { doseQuant -> dosageRate.dose = create('Range') as d then { doseQuant -> d.low = create('SimpleQuantity') as l then { doseQuant.low as lo -> l.value = (lo.value); doseQuant.low as lo -> l.unit = (lo.unit); } "low"; doseQuant -> d.high = create('SimpleQuantity') as h then { doseQuant.high as hi -> h.value = (hi.value); doseQuant.high as hi -> h.unit = (hi.unit); } "low"; } "d"; } "dosageRate"; } "Dosage"; substract.rateQuantity as rateQuantity -> medicationRq.dosageInstruction = create('Dosage') as dosageInstruction1 then { rateQuantity.originalText as ot then { ot.reference -> dosageInstruction1.text; } "ot"; rateQuantity -> dosageInstruction1.doseAndRate as dosageRate then { rateQuantity -> dosageRate.rate = create('Range') as d then { rateQuantity -> d.low = create('SimpleQuantity') as l then { rateQuantity.low as lo -> l.value = (lo.value); rateQuantity.low as lo -> l.unit = (lo.unit); } "low"; rateQuantity -> d.high = create('SimpleQuantity') as h then { rateQuantity.high as hi -> h.value = (hi.value); rateQuantity.high as hi -> h.unit = (hi.unit); } "low"; } "d"; } "dosageRate"; } "rateq"; substract.participant as part -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'PUT', e1.resource = create('Practitioner') as practitioner then { part.time as time -> medicationRq.authoredOn = (time.value); part.participantRole as partRole then { partRole -> practitioner.meta as meta then { partRole -> meta.tag = create('Coding') as coding then { partRole -> coding.system = 'http://algoritmodiscoring' "system"; partRole -> coding.code = 'ClinicalDocument/body/TerapiaFarmacologicaRicovero/participant' "code"; } "coding"; } "meta"; partRole.id as id -> practitioner.identifier as identifier then { id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1"; id.extension as ext -> identifier.value = ext; id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s; id.root as r then { id.extension as ext -> practitioner.id = (r + '-' + ext) as uuid2, e1.fullUrl = append('https://example/Practitioner/', uuid2), request.url = append('Practitioner/', uuid1), medicationRq.performer = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut"; } "r"; } "identifier"; partRole.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then { id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID"; } "2"; partRole.playingEntity as assi then { assi.name -> practitioner.name; } "assi"; } "perf"; } "partRole"; } "participant"; } "substract"; }
{
"resourceType" : "StructureMap",
"id" : "cda2fhirLdo",
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <pre>map "http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirLdo" = "cda2fhirLdo"\n\nuses "http://hl7.org/fhir/cda/StructureDefinition/ClinicalDocument" alias ClinicalDocument as source\nuses "http://hl7.org/fhir/cda/StructureDefinition/AssignedAuthor" alias AssignedAuthor as queried\nuses "http://hl7.org/fhir/cda/StructureDefinition/AssignedEntity" alias AssignedEntity as queried\nuses "http://hl7.org/fhir/cda/StructureDefinition/AssociatedEntity" alias AssociatedEntity as queried\nuses "http://hl7.org/fhir/cda/StructureDefinition/CustodianOrganization" alias CustodianOrganization as queried\nuses "http://hl7.org/fhir/cda/StructureDefinition/OrganizationPartOf" alias OrganizationPartOf as queried\nuses "http://hl7.org/fhir/cda/StructureDefinition/Organization" alias rapresentedOrganization as queried\nuses "http://hl7.org/fhir/cda/StructureDefinition/Section" alias Section as queried\nuses "http://hl7.org/fhir/cda/StructureDefinition/PatientRole" alias PatientRole as queried\nuses "http://hl7.org/fhir/cda/StructureDefinition/AD" alias AD as source\nuses "http://hl7.org/fhir/StructureDefinition/Bundle" alias Bundle as target\nuses "http://hl7.org/fhir/StructureDefinition/Composition" alias Composition as produced\nuses "http://hl7.org/fhir/StructureDefinition/Patient" alias Patient as produced\nuses "http://hl7.org/fhir/StructureDefinition/Encounter" alias Encounter as produced\nuses "http://hl7.org/fhir/StructureDefinition/Person" alias Patient as produced\nuses "http://hl7.org/fhir/StructureDefinition/Practitioner" alias Practitioner as produced\nuses "http://hl7.org/fhir/StructureDefinition/Organization" alias Organization as produced\nuses "http://hl7.org/fhir/cda/StructureDefinition/Act" alias Act as produced\nuses "http://hl7.org/fhir/cda/StructureDefinition/IVL-PQ" alias IVL_PQ as source\nuses "http://hl7.org/fhir/cda/StructureDefinition/PQ" alias PQ as source\nuses "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" alias SimpleQuantity as target\n\nimports "http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirDataTypes"\nimports "http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirHeader"\n\ngroup CdaToBundle(source cda : ClinicalDocument, target bundle : Bundle) {\n cda -> bundle.entry as e, e.request = create('BackboneElement') as request, request.method = 'POST', e.resource = create('Composition') as composition, composition.id = uuid() as uuid1, e.fullUrl = append('https://example/Composition/', uuid1), request.url = 'Composition', bundle.entry as e2, e2.request = create('BackboneElement') as requestPAT, requestPAT.method = 'PUT', e2.resource = create('Patient') as patient, patient.id = uuid() as uuid2, e2.fullUrl = append('https://example/Patient/', uuid2), bundle.entry as e3, e3.request = create('BackboneElement') as request, request.method = 'POST', e3.resource = create('Encounter') as encounter, encounter.id = uuid() as uuid3, e3.fullUrl = append('https://example/Encounter/', uuid3), request.url = 'Encounter', bundle.entry as e5, e5.request = create('BackboneElement') as request, request.method = 'POST', e5.resource = create('DocumentReference') as DocumentReference, DocumentReference.id = uuid() as uuid5, e5.fullUrl = append('https://example/DocumentReference/', uuid5), request.url = 'DocumentReference' then {\n cda then ClinicalDocumentToBundle(cda, patient, composition, encounter, bundle, DocumentReference) "cdatobundle";\n cda.recordTarget as recordTarget then {\n recordTarget.patientRole as patient then {\n patient.id as id -> patient.identifier as identifier then {\n id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1";\n id.extension as ext -> identifier.value = ext;\n id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s;\n } "record";\n patient.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') or (root = '2.16.840.1.113883.2.9.4.3.7') or (root = '2.16.840.1.113883.2.9.4.3.3') or (root = '2.16.840.1.113883.2.9.4.3.17') or (root = '2.16.840.1.113883.2.9.4.3.18') or (root = '2.16.840.1.113883.2.9.2.10.4.1.1') or (root = '2.16.840.1.113883.2.9.2.20.4.1.1') or (root = '2.16.840.1.113883.2.9.2.30.4.1.1') or (root = '2.16.840.1.113883.2.9.2.41.4.1.1') or (root = '2.16.840.1.113883.2.9.2.42.4.1.1') or (root = '2.16.840.1.113883.2.9.2.50.4.1.1') or (root = '2.16.840.1.113883.2.9.2.60.4.1.1') or (root = '2.16.840.1.113883.2.9.2.70.4.1.1') or (root = '2.16.840.1.113883.2.9.2.80.4.1.1') or (root = '2.16.840.1.113883.2.9.2.90.4.1.1') or (root = '2.16.840.1.113883.2.9.2.100.4.1.1') or (root = '2.16.840.1.113883.2.9.2.110.4.1.1') or (root = '2.16.840.1.113883.2.9.2.120.4.1.1') or (root = '2.16.840.1.113883.2.9.2.130.4.1.1') or (root = '2.16.840.1.113883.2.9.2.140.4.1.1') or (root = '2.16.840.1.113883.2.9.2.150.4.1.1') or (root = '2.16.840.1.113883.2.9.2.160.4.1.1') or (root = '2.16.840.1.113883.2.9.2.170.4.1.1') or (root = '2.16.840.1.113883.2.9.2.180.4.1.1') or (root = '2.16.840.1.113883.2.9.2.190.4.1.1') or (root = '2.16.840.1.113883.2.9.2.200.4.1.1') or (root = '2.16.840.1.113883.2.9.2.10.4.1') or (root = '2.16.840.1.113883.2.9.2.20.4.1') or (root = '2.16.840.1.113883.2.9.2.30.4.1') or (root = '2.16.840.1.113883.2.9.2.41.4.1') or (root = '2.16.840.1.113883.2.9.2.42.4.1') or (root = '2.16.840.1.113883.2.9.2.50.4.1') or (root = '2.16.840.1.113883.2.9.2.60.4.1') or (root = '2.16.840.1.113883.2.9.2.70.4.1') or (root = '2.16.840.1.113883.2.9.2.80.4.1') or (root = '2.16.840.1.113883.2.9.2.90.4.1') or (root = '2.16.840.1.113883.2.9.2.100.4.1') or (root = '2.16.840.1.113883.2.9.2.110.4.1') or (root = '2.16.840.1.113883.2.9.2.120.4.1') or (root = '2.16.840.1.113883.2.9.2.130.4.1') or (root = '2.16.840.1.113883.2.9.2.140.4.1') or (root = '2.16.840.1.113883.2.9.2.150.4.1') or (root = '2.16.840.1.113883.2.9.2.160.4.1') or (root = '2.16.840.1.113883.2.9.2.170.4.1') or (root = '2.16.840.1.113883.2.9.2.180.4.1') or (root = '2.16.840.1.113883.2.9.2.190.4.1') or (root = '2.16.840.1.113883.2.9.2.200.4.1') or (root = '2.16.840.1.113883.2.9.4.3.15') then {\n id.extension as ext -> requestPAT.url = append('Patient?identifier=', ext) "UUID";\n } "ext";\n } "recPat";\n } "patient";\n } "ClinicalDocumentToBody";\n}\n\ngroup ClinicalDocumentToBundle(source cda : ClinicalDocument, target patient : Patient, target composition : Composition, target encounter : Encounter, target bundle : Bundle, target DocumentReference : DocumentReference) {\n cda -> bundle.id = uuid() "id";\n cda.id -> bundle.identifier "identifier";\n cda -> bundle.type = 'transaction' "type";\n cda -> bundle.timestamp = (timestamp.now()) "date";\n cda then ClinicalDocumentComposition(cda, composition, patient, encounter, bundle, DocumentReference) "composition";\n cda.component as component then {\n component.structuredBody as body then {\n body.component as component then {\n // discretizzi il primo livello di component\n component.section as srcSection then {\n srcSection.code where (code = '46241-6') -> composition.section as tgtSection then ClinicalDocumentSectionMotivoRicovero(cda, srcSection, patient, tgtSection, bundle, encounter) "motivoRicovero";\n srcSection.code where (code = '47039-3') -> composition.section as tgtSection then ClinicalDocumentSectionInquadramentoClinico(cda, srcSection, patient, tgtSection, bundle, encounter) "inquadramentoClinico";\n srcSection.code where (code = '8648-8') -> composition.section as tgtSection then ClinicalDocumentSectionDecorsoOspedaliero(cda, srcSection, patient, tgtSection, bundle, encounter) "DecorsoOspedaliero";\n srcSection.code where (code = '55109-3') -> composition.section as tgtSection then ClinicalDocumentSectionComplicanze(cda, srcSection, patient, tgtSection, bundle, encounter) "Complicazioni";\n srcSection.code where (code = '11493-4') -> composition.section as tgtSection then ClinicalDocumentSectionRiscontri(cda, srcSection, patient, tgtSection, bundle, encounter) "HospitalDischargeStudiesSummary";\n srcSection.code where (code = '34104-0') -> composition.section as tgtSection then ClinicalDocumentSectionConsulenza(cda, srcSection, patient, tgtSection, bundle, encounter) "HospitalDischargeStudiesSummary";\n srcSection.code where (code = '30954-2') -> composition.section as tgtSection then ClinicalDocumentSectionEsamiEseguitiRicovero(cda, srcSection, patient, tgtSection, bundle, encounter) "EsamiEseguitiDuranteilRicovero";\n srcSection.code where (code = '47519-4') -> composition.section as tgtSection then ClinicalDocumentSectionProcedureEseguiteRicovero(cda, srcSection, patient, tgtSection, bundle, encounter) "HistoryOfProceduresDocument";\n srcSection.code where (code = '48765-2') -> composition.section as tgtSection then ClinicalDocumentSectionAllergie(cda, srcSection, patient, tgtSection, bundle, encounter) "EsamiEseguitiDuranteIlRicovero";\n srcSection.code where (code = '10160-0') -> composition.section as tgtSection then ClinicalDocumentSectionTerapiaFarmacologicaDuranteRicovero(cda, srcSection, patient, tgtSection, bundle, encounter) "TerapiaFarmacologicaAllaDimissione";\n srcSection.code where (code = '11535-2') -> composition.section as tgtSection then ClinicalDocumentSectionDiagnosiDimissione(cda, srcSection, patient, tgtSection, bundle, encounter) "DiagnosiDiDimissione";\n srcSection.code where (code = '18776-5') -> composition.section as tgtSection then ClinicalDocumentSectionIstruzioniFollowUp(cda, srcSection, patient, tgtSection, bundle, encounter) "DiagnosiDiDimissione";\n srcSection.code where (code = '10183-2') -> composition.section as tgtSection then ClinicalDocumentSectionTerapiaDimissione(cda, srcSection, patient, tgtSection, bundle, encounter) "TerapiaFarmacologicaAllaDimissione";\n };\n };\n } "body";\n };\n}\n\n// -------------------------------------------------------------------------------------------------------------------\ngroup ClinicalDocumentSectionMotivoRicovero(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src where src.entry.exists() then {\n src.text as cdaText -> tgt.text as fhirText then {\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n } "cdaText";\n } "cText";\n src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then {\n entry1.observation as obs then Observation(obs, patient, enc, observation, bundle) "act";\n };\n src where src.entry.exists().not() then {\n src.text as cdaText -> bundle.entry as e8, e8.request = create('BackboneElement') as request, request.method = 'POST', e8.resource = create('Observation') as Observation, Observation.id = uuid() as uuid8, e8.fullUrl = append('https://example/Observation/', uuid8), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %Observation.id) then {\n src -> Observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> Observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n src.code -> Observation.code;\n src where observation.statusCode.exists().not() then {\n src -> Observation.status = 'final' "status";\n } "statuscode";\n cdaText -> Observation.note as note then {\n cdaText as t -> note.text = t "reference";\n } "reference";\n } "cdaText";\n } "where";\n}\n\ngroup ClinicalDocumentSectionInquadramentoClinico(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id), tgt.text as fhirText then {\n cdaText -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n cdaText -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n src.code -> observation.code;\n src where observation.statusCode.exists().not() then {\n src -> observation.status = 'final' "status";\n } "statuscode";\n cdaText -> observation.note as note then {\n cdaText as t -> note.text = t "reference";\n } "reference";\n } "cdaText";\n src.component as component then {\n component.section as section2 then {\n // ANAMNESI\n section2 -> tgt.section as sec2 then {\n section2.code where (code = '11329-0') -> sec2.code;\n section2.title as t -> sec2.title = (t.dataString);\n // section2.code -> sec2.code;\n src where src.entry.exists() then {\n section2.text as cdaText -> sec2.text as fhirText then {\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n } "cdaText";\n } "exist";\n src where src.entry.exists().not() then {\n section2.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as condition, condition.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', sec2.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %condition.id) then {\n section2.code -> condition.code;\n src where condition.statusCode.exists().not() then {\n src -> condition.status = 'final' "status";\n } "statuscode";\n cdaText -> condition.note as note then {\n cdaText -> condition.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n cdaText -> condition.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n cdaText as t -> note.text = t "reference";\n } "reference";\n } "cdaText";\n } "where";\n section2.entry as entry1 then {\n entry1.observation as obs then {\n // EntryRelationship per il Problem\n obs.code where (code = '75326-9') then {\n obs -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Condition') as condition, condition.id = uuid() as uuid1, e1.fullUrl = append('https://example/Condition/', uuid1), request.url = 'Condition', sec2.entry = create('Reference') as reference, reference.reference = ('https://example/Condition/' + %condition.id) then {\n obs.code -> condition.category;\n obs -> condition.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n obs -> condition.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n obs.statusCode as status where (code = 'completed') -> condition.verificationStatus as status2 then {\n status -> status2.coding as status3 then {\n status -> status3.code = 'confirmed' "finald";\n status -> status3.system = 'http://terminology.hl7.org/CodeSystem/condition-ver-status' "system";\n } "st3";\n } "status";\n obs.effectiveTime as effective1 then {\n effective1 where effective1.low.exists() or effective1.high.exists() then {\n effective1 -> condition.onset = create('Period') as periodonset then IVLTSPeriod(effective1, periodonset) "onsetperiod";\n } "ef";\n } "effectivetime1";\n obs.value : CD as val then {\n val -> condition.code = create('CodeableConcept') as ce then {\n val.originalText -> ce.text;\n val -> ce.coding as coding then {\n val.code as code -> coding.code = cast(code, 'string');\n val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n val.displayName as display -> coding.display = cast(display, 'string');\n } "coding";\n } "Ce";\n } "Value";\n obs.entryRelationship as entriRel then {\n entriRel -> condition.evidence = create('BackboneElement') as evidence then {\n entriRel.observation as observation2 then {\n observation2.code as code then {\n code.code where (code.code = '89261-2') then {\n obs -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation' then {\n entriRel -> evidence.detail = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) "ref";\n observation2.code -> observation.code;\n observation2 where observation.statusCode.exists().not() then {\n observation2 -> observation.status = 'final' "status";\n } "statuscode";\n observation2.text as text -> observation.note = create('Annotation') as note then {\n text.reference as ref -> note.text = (ref.value) "val";\n } "Annontation";\n obs -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n obs -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n observation2.statusCode as statusc where (code = 'completed') -> ob.status = 'final';\n observation2.statusCode as statusc where (code = 'active') -> ob.status = 'registered';\n observation2.statusCode as statusc where (code = 'aborted') -> ob.status = 'cancelled';\n observation2.statusCode as statusc where (code = 'suspended') -> ob.status = 'partial';\n observation2.value : INT as int -> ob.value = (int.value);\n observation2.value : BL as boolean -> ob.value = (boolean.value) "boolean";\n observation2.value : CD as val then {\n val -> ob.value = create('CodeableConcept') as ce then {\n val.originalText as originalText then {\n originalText.reference as reference -> ce.text = reference;\n } "originltext";\n val -> ce.coding as coding then {\n val.code as code -> coding.code = cast(code, 'string');\n val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n val.displayName as display -> coding.display = cast(display, 'string');\n val.codeSystemVersion as version -> coding.version = cast(version, 'string');\n } "code";\n val.translation as translation -> ce.coding as coding then {\n translation.code as code -> coding.code = cast(code, 'string');\n translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n translation.displayName as display -> coding.display = cast(display, 'string');\n translation.codeSystemVersion as version -> coding.version = cast(version, 'string');\n translation.qualifier as qualifier then {\n qualifier.value as value -> ce.coding as coding then {\n value.code as code -> coding.code = cast(code, 'string');\n value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n value.displayName as display -> coding.display = cast(display, 'string');\n value.codeSystemVersion as version -> coding.version = cast(version, 'string');\n };\n };\n };\n } "coding";\n } "val";\n observation2.value : PQ as val then {\n val -> ob.value = create('Quantity') as quantity then {\n val.value as value -> quantity.value = value;\n val.unit as unit -> quantity.unit = unit;\n } "quantity";\n } "valueQuantity";\n observation2.value : ST as value -> ob.value = create('string'), ob.value = (value.dataString);\n observation2.value : CE as val then {\n val -> observation.value = create('CodeableConcept') as ce then {\n val.originalText -> ce.text;\n val -> ce.coding as coding then {\n val.code as code -> coding.code = cast(code, 'string');\n val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n val.displayName as display -> coding.display = cast(display, 'string');\n } "coding";\n } "Ce";\n } "Value";\n } "obser";\n } "whereDecorsoClinico";\n };\n } "Observation2";\n } "evidence";\n } "EntryRelationship1";\n obs.entryRelationship as entriRel then {\n entriRel.observation as observation2 then {\n observation2.code as code then {\n code.code where (code.code = '33999-4') then {\n observation2 -> condition.clinicalStatus = create('CodeableConcept') as status then {\n observation2.text as text then {\n text.reference as refstat -> status.text = (refstat.value) "statref";\n } "textstat";\n observation2 -> status.coding = create('Coding') as coding then {\n observation2.value as value then {\n value.code where (value.code = 'LA16666-2') -> coding.code = 'active' "active";\n value.code where (value.code = 'LA18632-2') -> coding.code = 'inactive' "inactive";\n value.codeSystem as system -> coding.system = 'http://terminology.hl7.org/CodeSystem/condition-clinical' "system";\n value.displayName as display -> coding.display = cast(display, 'string');\n } "value1";\n } "coding";\n } "code";\n } "whereDecorsoClinico";\n } "codestatus";\n } "observationstatus";\n } "entryrelationshipstatus";\n } "whereEntryPatologicaProssima";\n } "observationcondition";\n } "entry";\n } "subsection1";\n // ESAME PBIETTIVO\n section2.code where (code = '29545-1') then ClinicalDocumentSottoSectionOBS(section2, sec2, bundle, enc, patient) "esameObiettivo";\n // TETAPIA FARMACOLOGICA\n section2.code where (code = '42346-7') then ClinicalDocumentSottoSectionMS(section2, sec2, bundle, patient, enc) "TerapiaFarmacologicaAllIngresso";\n } "sec2fhir";\n } "componentSec";\n };\n}\n\ngroup ClinicalDocumentSectionDecorsoOspedaliero(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id), tgt.text as fhirText then {\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n src.code -> observation.code;\n src where observation.statusCode.exists().not() then {\n src -> observation.status = 'final' "status";\n } "statuscode";\n src -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n cdaText -> observation.note as note then {\n cdaText as t -> note.text = t "reference";\n } "reference";\n } "cdaText";\n src.component as component then {\n component.section as section2 then {\n src then ClinicalDocumentSottoSectionOBS(section2, tgt, bundle, enc, patient) "Decorso";\n } "1";\n } "2";\n}\n\ngroup ClinicalDocumentSectionComplicanze(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src where src.entry.exists() then {\n src.text as cdaText -> tgt.text as fhirText then {\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n } "cdaText";\n } "exist";\n src where src.entry.exists().not() then {\n src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then {\n src -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n src.code -> observation.code;\n src where observation.statusCode.exists().not() then {\n src -> observation.status = 'final' "status";\n } "statuscode";\n cdaText -> observation.note as note then {\n cdaText as t -> note.text = t "reference";\n } "reference";\n } "cdaText";\n } "where";\n src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then {\n entry1.observation as obs then Observation(obs, patient, enc, observation, bundle) "act";\n };\n}\n\ngroup ClinicalDocumentSectionRiscontri(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id), tgt.text as fhirText then {\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n src.code -> observation.code;\n src where observation.statusCode.exists().not() then {\n src -> observation.status = 'final' "status";\n } "statuscode";\n src -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n cdaText -> observation.note as note then {\n cdaText as t -> note.text = t "reference";\n } "reference";\n } "cdaText";\n src.component as component then {\n component.section as section2 then {\n src then ClinicalDocumentSottoSectionOBS(section2, tgt, bundle, enc, patient) "Decorso";\n } "1";\n } "2";\n}\n\ngroup ClinicalDocumentSectionConsulenza(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src where src.entry.exists() then {\n src.text as cdaText -> tgt.text as fhirText then {\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n } "cdaText";\n } "exist";\n src where src.entry.exists().not() then {\n src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then {\n src -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n src.code -> observation.code;\n src where observation.statusCode.exists().not() then {\n src -> observation.status = 'final' "status";\n } "statuscode";\n cdaText -> observation.note as note then {\n cdaText as t -> note.text = t "reference";\n } "reference";\n } "cdaText";\n } "where";\n src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then {\n entry1.observation as obs then ObservationConsulenza(obs, patient, enc, observation, bundle) "act";\n };\n}\n\ngroup ClinicalDocumentSectionEsamiEseguitiRicovero(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src where src.entry.exists() then {\n src.text as cdaText -> tgt.text as fhirText then {\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n } "cdaText";\n } "exists";\n src where src.entry.exists().not() then {\n src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then {\n src -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n src.code -> observation.code;\n src where observation.statusCode.exists().not() then {\n src -> observation.status = 'final' "status";\n } "statuscode";\n cdaText -> observation.note as note then {\n cdaText as t -> note.text = t "reference";\n } "reference";\n } "cdaText";\n } "where";\n src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then {\n entry1.observation as obs then ObservationEsamiDuranteRicovero(obs, patient, enc, observation, bundle) "act";\n };\n}\n\ngroup ClinicalDocumentSectionProcedureEseguiteRicovero(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src where src.entry.exists() then {\n src.text as cdaText -> tgt.text as fhirText then {\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n } "cdaText";\n } "exists";\n src where src.entry.exists().not() then {\n src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Procedure') as procedure, procedure.id = uuid() as uuid1, e1.fullUrl = append('https://example/Procedure/', uuid1), request.url = 'Procedure', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Procedure/' + %procedure.id) then {\n src -> procedure.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> procedure.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n src -> procedure.status = 'unknown' "statuscode";\n cdaText -> procedure.note as note then {\n cdaText as t -> note.text = t "reference";\n } "reference";\n } "cdaText";\n } "where";\n src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Procedure') as procedure, procedure.id = uuid() as uuid1, e1.fullUrl = append('https://example/Procedure/', uuid1), request.url = 'Procedure', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Procedure/' + %procedure.id) then {\n src -> procedure.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> procedure.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n entry1.procedure as proceduresrc then {\n proceduresrc.code -> procedure.code;\n proceduresrc.text as txt -> procedure.note as note then {\n txt.reference as ref -> note.text = (ref.value);\n };\n proceduresrc where proc.statusCode.exists().not() then {\n proceduresrc -> procedure.status = 'unknown' "statuscode";\n } "status";\n proceduresrc.statusCode as statusc where (code = 'completed') -> procedure.status = 'completed';\n proceduresrc.statusCode as statusc where (code = 'active') -> procedure.status = 'in-progress';\n proceduresrc.statusCode as statusc where (code = 'aborted') -> procedure.status = 'stopped';\n proceduresrc.statusCode as statusc where (code = 'suspended') -> procedure.status = 'on-hold';\n proceduresrc.statusCode as statusc where (code = 'cancelled') -> procedure.status = 'not-done';\n proceduresrc.statusCode as statusc where (code = 'held') -> procedure.status = 'on-hold';\n proceduresrc.statusCode as statusc where (code = 'new') -> procedure.status = 'preparation';\n proceduresrc.statusCode as statusc where (code = 'obsolete') -> procedure.status = 'entered-in-error';\n proceduresrc.statusCode as statusc where (code = 'nullified') -> procedure.status = 'unknown';\n proceduresrc.effectiveTime as efft -> procedure.performed = create('Period') as period then IVLTSPeriod(efft, period);\n proceduresrc.entryRelationship as entriRel -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', procedure.reasonReference = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then {\n entriRel -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n entriRel -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n entriRel.observation as obs then {\n obs.code -> observation.code;\n obs where observation.statusCode.exists().not() then {\n obs -> observation.status = 'final' "status";\n } "statuscode";\n } "ObservationValue";\n } "Observation";\n } "Procedure";\n } "Entry";\n}\n\ngroup ClinicalDocumentSectionAllergie(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src where src.entry.exists() then {\n src.text as cdaText -> tgt.text as fhirText then {\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n } "cdaText";\n } "exists";\n src where src.entry.exists().not() then {\n src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('AllergyIntolerance') as allergy, allergy.id = uuid() as uuid1, e1.fullUrl = append('https://example/AllergyIntolerance/', uuid1), request.url = 'AllergyIntolerance', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/AllergyIntolerance/' + %allergy.id) then {\n src -> allergy.patient = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> allergy.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n src -> allergy.clinicalStatus = create('CodeableConcept') as status then {\n src -> status.text = 'string' "text";\n src -> status.coding = create('Coding') as coding then {\n src -> coding.code = 'active' "active";\n src -> coding.system = 'http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical' "system";\n } "coding";\n } "allergy";\n src.code -> allergy.code;\n cdaText -> allergy.note as note then {\n cdaText as t -> note.text = t "reference";\n } "reference";\n } "cdaText";\n } "where";\n src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('AllergyIntolerance') as allergy, allergy.id = uuid() as uuid1, e1.fullUrl = append('https://example/AllergyIntolerance/', uuid1), request.url = 'AllergyIntolerance', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/AllergyIntolerance/' + %allergy.id) then {\n src -> allergy.patient = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> allergy.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n entry1.act as actallint then {\n actallint.effectiveTime as eff -> allergy.onset = create('Period') as per then IVLTSPeriod(eff, per);\n actallint.entryRelationship as entryact then {\n entryact.observation as entryobs then {\n entryobs.value as code then {\n code.code as code1 -> allergy.type = translate(code1, '#AllergyTypeMap', 'code') "type";\n code.code as code2 -> allergy.category = translate(code2, '#AllergyCategoryMap', 'code') "category";\n } "code";\n entryobs.participant as partic then {\n partic.participantRole as pratRole then {\n pratRole.playingEntity as pratent then {\n pratent -> allergy.reaction = create('BackboneElement') as reaction then {\n pratent.code -> reaction.substance "subs";\n entryobs.entryRelationship as entryobs1 where (typeCode = 'MFST') then {\n entryobs1.observation as entobs then {\n entobs.effectiveTime as eff then {\n eff.low as l -> reaction.onset = create('dateTime') as start then TSDateTime(l, start) "val";\n } "eff";\n entobs.value -> reaction.manifestation "manifest";\n } "observ";\n } "entry";\n } "cod";\n } "react";\n } "pratentit";\n } "PratRole";\n entryobs.entryRelationship as entryobs2 then {\n entryobs2.observation as entobs then {\n entobs.code as code where (code = 'SEV') then {\n entobs.value as value then {\n value.code where (value.code = 'M') -> allergy.criticality = 'unable-to-assess' "active";\n value.code where (value.code = 'L') -> allergy.criticality = 'low' "active";\n value.code where (value.code = 'H') -> allergy.criticality = 'high' "active";\n } "entobs";\n } "sev";\n } "severity";\n } "observ";\n entryobs.entryRelationship as entryobs3 then {\n entryobs3.observation as entobs then {\n entobs.code as code where (code = '33999-4') then {\n entobs -> allergy.clinicalStatus = create('CodeableConcept') as status then {\n entobs -> status.coding = create('Coding') as coding then {\n entobs.value as value then {\n value.code where (value.code = 'LA16666-2') -> coding.code = 'active' "active";\n value.code where (value.code = 'LA18632-2') -> coding.code = 'inactive' "active";\n value.codeSystem as system -> coding.system = 'http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical' "system";\n value.displayName as display -> coding.display = cast(display, 'string');\n } "value1";\n } "coding";\n } "clinicalStatus";\n } "stat";\n } "obobs3serv";\n } "entry3";\n entryobs.entryRelationship as entryobs4 then {\n entryobs4.act as entact then {\n entact.text as actext then {\n actext.reference as reftxt -> allergy.note = create('BackboneElement') as note then {\n reftxt as ref -> note.text = (ref.value) "notxt";\n } "notetxt";\n } "txtact";\n } "obobs4serv";\n } "entry4";\n } "partic";\n };\n };\n } "allergy";\n}\n\ngroup ClinicalDocumentSectionDiagnosiDimissione(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src where src.entry.exists() then {\n src.text as cdaText -> tgt.text as fhirText then {\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n } "cdaText";\n } "exists";\n src where src.entry.exists().not() then {\n src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then {\n src -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n src.code -> observation.code;\n src where observation.statusCode.exists().not() then {\n src -> observation.status = 'final' "status";\n } "statuscode";\n cdaText -> observation.note as note then {\n cdaText as t -> note.text = t "reference";\n } "reference";\n } "cdaText";\n } "where";\n src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id) then {\n entry1.observation as obs then Observation(obs, patient, enc, observation, bundle) "act";\n };\n}\n\ngroup ClinicalDocumentSectionIstruzioniFollowUp(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src.text as cdaText -> tgt.text as fhirText then {\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n } "cdaText";\n src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('CarePlan') as carePlan, carePlan.id = uuid() as uuid1, e1.fullUrl = append('https://example/CarePlan/', uuid1), request.url = 'CarePlan', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/CarePlan/' + %carePlan.id) then {\n cdaText -> carePlan.note as note then {\n cdaText as t -> note.text = t "reference";\n } "reference";\n src -> carePlan.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> carePlan.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n src -> carePlan.status = 'active' "status";\n src -> carePlan.intent = 'order' "intent";\n } "entry";\n}\n\ngroup ClinicalDocumentSectionTerapiaFarmacologicaDuranteRicovero(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src where src.entry.exists() then {\n src.text as cdaText -> tgt.text as fhirText then {\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n } "cdaText";\n } "exists";\n src where src.entry.exists().not() then {\n src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('MedicationAdministration') as medicationAdm, medicationAdm.id = uuid() as uuid1, e1.fullUrl = append('https://example/MedicationAdministration/', uuid1), request.url = 'MedicationAdministration', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/MedicationAdministration/' + %medicationAdm.id) then {\n cdaText -> medicationAdm.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n cdaText -> medicationAdm.context = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n cdaText -> medicationAdm.medication = create('CodeableConcept') as codecon then {\n cdaText -> codecon.text = 'string' "text";\n } "code";\n src -> medicationAdm.effective = create('Period') as period then {\n src -> period.start = (start.now()) "low";\n src -> period.end = (end.now()) "high";\n } "Period";\n src where sub.statusCode.exists().not() then {\n src -> medicationAdm.status = 'completed' "status";\n } "statuscode";\n cdaText -> medicationAdm.note as note then {\n cdaText as t -> note.text = t "reference";\n } "reference";\n } "cdaText";\n } "where";\n src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('MedicationAdministration') as medicationAdm, medicationAdm.id = uuid() as uuid1, e1.fullUrl = append('https://example/MedicationAdministration/', uuid1), request.url = 'MedicationAdministration', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/MedicationAdministration/' + %medicationAdm.id) then {\n entry1 -> medicationAdm.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n entry1 -> medicationAdm.context = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n entry1.substanceAdministration as sa then {\n sa.text as tx -> medicationAdm.note as note then {\n sa.performer as performer -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'PUT', e1.resource = create('Practitioner') as practitioner then {\n performer.time as ti -> note.time = (ti.value);\n performer.assignedEntity as assEnty then {\n assEnty -> practitioner.meta as meta then {\n assEnty -> meta.tag = create('Coding') as coding then {\n assEnty -> coding.system = 'http://algoritmodiscoring' "system";\n assEnty -> coding.code = 'ClinicalDocument/body/TerapiaFarmacologicaRicovero/performer' "code";\n } "coding";\n } "meta";\n assEnty.id as id -> practitioner.identifier as identifier then {\n id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1";\n id.extension as ext -> identifier.value = ext;\n id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s;\n id.root as r then {\n id.extension as ext -> practitioner.id = (r + '-' + ext) as uuid2, e1.fullUrl = append('https://example/Practitioner/', uuid2), request.url = 'Practitioner', medicationAdm.performer as perf, perf.actor = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut";\n } "r";\n } "identifier";\n assEnty.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then {\n id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID";\n } "2";\n assEnty.id as id where (root != '2.16.840.1.113883.2.9.4.3.2') then {\n id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID";\n } "diverso";\n assEnty.assignedPerson as assi then {\n assi.name -> practitioner.name;\n } "assi";\n } "assEntity";\n } "perf";\n tx.reference as ref -> note.text = (ref.value);\n } "tx";\n sa.statusCode as st -> medicationAdm.status = (st.code);\n sa.effectiveTime as eff -> medicationAdm.effective = create('Period') as period then IVLTSPeriod(eff, period) "period";\n sa -> medicationAdm.dosage as dos then {\n sa.routeCode -> dos.route;\n } "dos";\n sa -> medicationAdm.dosage as dos then {\n sa.approachSiteCode -> dos.site;\n } "dos";\n sa.doseQuantity as doseQuant -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('MedicationRequest') as medicationRq, medicationRq.id = uuid() as uuid1, e1.fullUrl = append('https://example/MedicationRequest/', uuid1), request.url = 'MedicationRequest', medicationAdm.request = create('Reference') as reference, reference.reference = ('https://example/MedicationRequest/' + %medicationRq.id) then {\n doseQuant -> medicationRq.dosageInstruction = create('Dosage') as dosageInstruction then {\n doseQuant.originalText as ot then {\n ot.reference -> dosageInstruction.text;\n } "ot";\n doseQuant -> dosageInstruction.doseAndRate as dosageRate then {\n doseQuant -> dosageRate.dose = create('Range') as d then {\n doseQuant -> d.low = create('SimpleQuantity') as l then {\n doseQuant.low as lo -> l.value = (lo.value);\n doseQuant.low as lo -> l.unit = (lo.unit);\n } "low";\n doseQuant -> d.high = create('SimpleQuantity') as h then {\n doseQuant.high as hi -> h.value = (hi.value);\n doseQuant.high as hi -> h.unit = (hi.unit);\n } "low";\n } "d";\n } "dosageRate";\n } "Dosage";\n sa -> medicationRq.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n sa -> medicationRq.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n sa -> medicationRq.status = 'active' "status";\n sa -> medicationRq.intent = 'order' "intent";\n sa.rateQuantity as rateQuantity -> medicationRq.dosageInstruction = create('Dosage') as dosageInstruction1 then {\n rateQuantity.originalText as ot then {\n ot.reference -> dosageInstruction1.text;\n } "ot";\n rateQuantity -> dosageInstruction1.doseAndRate as dosageRate then {\n rateQuantity -> dosageRate.rate = create('Range') as d then {\n rateQuantity -> d.low = create('SimpleQuantity') as l then {\n rateQuantity.low as lo -> l.value = (lo.value);\n rateQuantity.low as lo -> l.unit = (lo.unit);\n } "low";\n rateQuantity -> d.high = create('SimpleQuantity') as h then {\n rateQuantity.high as hi -> h.value = (hi.value);\n rateQuantity.high as hi -> h.unit = (hi.unit);\n } "low";\n } "d";\n } "dosageRate";\n } "Dosage";\n sa -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Medication') as medication, medication.id = uuid() as uuid1, e1.fullUrl = append('https://example/Medication/', uuid1), request.url = 'Medication', medicationAdm.medication = create('Reference') as reference, reference.reference = ('https://example/Medication/' + %medication.id) then {\n sa -> medicationRq.medication = create('Reference') as reference, reference.reference = ('https://example/Medication/' + %medication.id) "reference";\n sa.administrationUnitCode -> medication.form;\n sa.consumable as consumable then {\n consumable.manufacturedProduct as manufac then {\n manufac.manufacturedMaterial as manuprod then {\n manuprod.code -> medication.code;\n } "manufactproduct";\n } "manufac";\n };\n sa.entryRelationship as entryRR then {\n entryRR.observation as observation then {\n observation.code where displayName = 'Grammatura' -> medication.ingredient as ingredient then {\n sa.consumable as consumable then {\n consumable.manufacturedProduct as manufacturedProduct then {\n manufacturedProduct.manufacturedMaterial as manufacturedMaterial then {\n manufacturedMaterial.code as code -> ingredient.item = create('CodeableConcept') as value then CECodeableConcept(code, value) "CE";\n } "material";\n } "product";\n };\n observation.value as value -> ingredient.strength as strength then {\n value -> strength.numerator as numerator then {\n value -> numerator.value = (value.value) "valueN";\n } "numerator";\n value -> strength.denominator as denominator then {\n value -> denominator.value = 1 "valueD";\n } "denominator";\n } "strenght";\n } "ingredient";\n observation.code where displayName = 'Quantità nella Confezione' then {\n observation.value as value -> medication.amount as amount then {\n value -> amount.numerator as numerator then {\n value -> numerator.value = (value.value) "valueN";\n } "numerator";\n value -> amount.denominator as denominator then {\n value -> denominator.value = 1 "valueD";\n } "denominator";\n } "amount";\n } "quantita";\n } "obs";\n } "entryRr";\n } "medication";\n sa.entryRelationship as entryRelationship then {\n entryRelationship.supply as sup -> medicationRq.dispenseRequest as dispreq then {\n sup -> dispreq.quantity = create('SimpleQuantity') as quantity then {\n sup.quantity as q -> quantity.value = (q.value);\n } "quantity";\n } "sub";\n } "entryR";\n sa.participant as participant then {\n participant.time as t -> medicationRq.authoredOn = (t.value);\n participant.participantRole as participantR -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'PUT', e1.resource = create('Practitioner') as practitioner then {\n participantR -> practitioner.meta as meta then {\n participantR -> meta.tag = create('Coding') as coding then {\n participantR -> coding.system = 'http://algoritmodiscoring' "system";\n participantR -> coding.code = 'ClinicalDocument/body/TerapiaFarmacologicaRicovero/participant' "code";\n } "coding";\n } "meta";\n participantR.id as id -> practitioner.identifier as identifier then {\n id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1";\n id.extension as ext -> identifier.value = ext;\n id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s;\n id.root as r then {\n id.extension as ext -> practitioner.id = (r + '-' + ext) as uuid2, e1.fullUrl = append('https://example/Practitioner/', uuid2), request.url = append('Practitioner/', uuid1), medicationRq.requester = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut";\n } "r";\n } "identifier";\n participantR.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then {\n id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID";\n } "2";\n participantR.playingEntity as assi then {\n assi.name -> practitioner.name;\n } "assi";\n } "perf";\n sa.effectiveTime : EIVL as eff -> medicationRq.dosageInstruction = create('Dosage') as dosage then {\n eff -> dosage.timing = create('Timing') as timing then {\n eff -> timing.repeat as rep then {\n eff.event as ev -> rep.where = (ev.code);\n } "rep";\n } "timing";\n } "period";\n sa.effectiveTime : TS as eff -> medicationRq.dosageInstruction = create('Dosage') as dosage, dosage.timing = create('Timing') as timing, timing.event = (eff.value) "tim";\n sa.effectiveTime : PIVL_TS as eff -> medicationAdm.dosage = create('BackboneElement') as dosage then {\n eff -> dosage.rate = create('Ratio') as ratio then {\n eff -> ratio.numerator = create('Quantity') as quan then {\n eff.period as per -> quan.value = (per.value);\n eff.period as per -> quan.unit = (per.unit);\n } "quanti";\n eff -> ratio.denominator = create('Quantity') as quan then {\n eff.period -> quan.value = '1';\n eff.period as per -> quan.unit = (per.unit);\n } "quanti";\n } "ratio";\n } "eff";\n } "Medicationrequest";\n } "sa";\n } "entry";\n } "sa";\n}\n\ngroup ClinicalDocumentSottoSectionOBS(source src : Section, target tgt, target bundle : Bundle, target enc : Encounter, target patient : Patient) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observation, observation.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observation.id), tgt.text as fhirText then {\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n src.code -> observation.code;\n src -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n src where observation.statusCode.exists().not() then {\n src -> observation.status = 'final' "status";\n } "statuscode";\n cdaText -> observation.note as note then {\n cdaText as t -> note.text = t "reference";\n } "reference";\n } "cdaText";\n}\n\ngroup ClinicalDocumentSottoSectionMS(source src : Section, target tgt, target bundle : Bundle, target patient : Patient, target enc : Encounter) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('MedicationStatement') as Medicationstatement, Medicationstatement.id = uuid() as uuid1, e1.fullUrl = append('https://example/MedicationStatement/', uuid1), request.url = 'MedicationStatement', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/MedicationStatement/' + %Medicationstatement.id), tgt.text as fhirText then {\n cdaText -> Medicationstatement.note as note then {\n cdaText as t -> note.text = t "reference";\n cdaText as t -> Medicationstatement.medication = create('CodeableConcept') as medication, medication.text = t "text";\n } "reference";\n src -> Medicationstatement.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> Medicationstatement.status = 'unknown' "status";\n } "cdaText";\n}\n\ngroup Observation(source obs : Observation, target patient : Patient, target encounter : Encounter, target ob : Observation, target bundle : Bundle) {\n obs -> ob.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n obs -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";\n obs.code -> ob.code;\n obs.statusCode as statusc where (code = 'completed') -> ob.status = 'final';\n obs.statusCode as statusc where (code = 'active') -> ob.status = 'registered';\n obs.statusCode as statusc where (code = 'aborted') -> ob.status = 'cancelled';\n obs.statusCode as statusc where (code = 'suspended') -> ob.status = 'partial';\n obs where obs.statusCode.exists().not() then {\n obs -> ob.status = 'final' "status";\n } "statuscode";\n obs.effectiveTime as effectiveTime -> ob.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value2";\n obs where effectiveTime.low.exists() or effectiveTime.high.exists() then {\n obs.effectiveTime as eff -> ob.effective = create('Period') as period then IVLTSPeriod(eff, period) "value3";\n } "where";\n obs.value : INT as int -> ob.value = (int.value);\n obs.value : BL as boolean -> ob.value = (boolean.value) "boolean";\n obs.value : CD as val then {\n val -> ob.value = create('CodeableConcept') as ce then {\n val.originalText -> ce.text;\n val -> ce.coding as coding then {\n val.code as code -> coding.code = cast(code, 'string');\n val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n val.displayName as display -> coding.display = cast(display, 'string');\n } "code";\n val.translation as translation -> ce.coding as coding then {\n translation.code as code -> coding.code = cast(code, 'string');\n translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n translation.displayName as display -> coding.display = cast(display, 'string');\n translation.qualifier as qualifier then {\n qualifier.value as value -> ce.coding as coding then {\n value.code as code -> coding.code = cast(code, 'string');\n value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n value.displayName as display -> coding.display = cast(display, 'string');\n };\n };\n };\n } "coding";\n } "val";\n obs.value : CE as val then {\n val -> ob.value = create('CodeableConcept') as ce then {\n val.originalText -> ce.text;\n val -> ce.coding as coding then {\n val.code as code -> coding.code = cast(code, 'string');\n val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n val.displayName as display -> coding.display = cast(display, 'string');\n } "code";\n val.translation as translation -> ce.coding as coding then {\n translation.code as code -> coding.code = cast(code, 'string');\n translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n translation.displayName as display -> coding.display = cast(display, 'string');\n translation.qualifier as qualifier then {\n qualifier.value as value -> ce.coding as coding then {\n value.code as code -> coding.code = cast(code, 'string');\n value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n value.displayName as display -> coding.display = cast(display, 'string');\n };\n };\n };\n } "coding";\n } "val";\n obs.value : PQ as val then {\n val -> ob.value = create('Quantity') as quantity then {\n val.value as value -> quantity.value = value;\n val.unit as unit -> quantity.unit = unit;\n } "quantity";\n } "valueQuantity";\n obs.value : ST as value -> ob.value = create('string'), ob.value = (value.dataString);\n obs.interpretationCode -> ob.interpretation;\n obs.methodCode -> ob.method;\n obs.referenceRange as refRange -> ob.referenceRange = create('BackboneElement') as ref then {\n refRange.observationRange as obsRange -> ref.low = create('SimpleQuantity') as Low then {\n obsRange.value : IVL_PQ as v then {\n v.low as l1 then {\n l1.value as decValue -> Low.value = decValue;\n l1.unit as Unit -> Low.unit = Unit;\n } "decValue";\n } "IVLPQ";\n } "obsRange";\n } "refRange";\n}\n\ngroup ObservationConsulenza(source obs : Observation, target patient : Patient, target encounter : Encounter, target ob : Observation, target bundle : Bundle) {\n obs -> ob.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n obs -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";\n obs.code -> ob.code;\n obs.statusCode as statusc where (code = 'completed') -> ob.status = 'final';\n obs.statusCode as statusc where (code = 'active') -> ob.status = 'registered';\n obs.statusCode as statusc where (code = 'aborted') -> ob.status = 'cancelled';\n obs.statusCode as statusc where (code = 'suspended') -> ob.status = 'partial';\n obs where obs.statusCode.exists().not() then {\n obs -> ob.status = 'final' "status";\n } "statuscode";\n obs.effectiveTime as effectiveTime -> ob.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value2c";\n obs where effectiveTime.low.exists() or effectiveTime.high.exists() then {\n obs.effectiveTime as eff -> ob.effective = create('Period') as period then IVLTSPeriod(eff, period) "value3c";\n } "where";\n obs.value : INT as int -> ob.value = (int.value);\n obs.value : BL as boolean -> ob.value = (boolean.value) "boolean";\n obs.value : CE as val then {\n val -> ob.value = create('CodeableConcept') as ce then {\n val.originalText as originalText then {\n originalText.reference as reference -> ce.text = reference;\n } "originltext";\n val -> ce.coding as coding then {\n val.code as code -> coding.code = cast(code, 'string');\n val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n val.displayName as display -> coding.display = cast(display, 'string');\n val.codeSystemVersion as version -> coding.version = cast(version, 'string');\n } "code";\n val.translation as translation -> ce.coding as coding then {\n translation.code as code -> coding.code = cast(code, 'string');\n translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n translation.displayName as display -> coding.display = cast(display, 'string');\n translation.codeSystemVersion as version -> coding.version = cast(version, 'string');\n translation.qualifier as qualifier then {\n qualifier.value as value -> ce.coding as coding then {\n value.code as code -> coding.code = cast(code, 'string');\n value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n value.displayName as display -> coding.display = cast(display, 'string');\n value.codeSystemVersion as version -> coding.version = cast(version, 'string');\n };\n };\n };\n } "coding";\n } "val";\n obs.value : CD as val then {\n val -> ob.value = create('CodeableConcept') as ce then {\n val.originalText -> ce.text;\n val -> ce.coding as coding then {\n val.code as code -> coding.code = cast(code, 'string');\n val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n val.displayName as display -> coding.display = cast(display, 'string');\n } "code";\n val.translation as translation -> ce.coding as coding then {\n translation.code as code -> coding.code = cast(code, 'string');\n translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n translation.displayName as display -> coding.display = cast(display, 'string');\n translation.qualifier as qualifier then {\n qualifier.value as value -> ce.coding as coding then {\n value.code as code -> coding.code = cast(code, 'string');\n value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n value.displayName as display -> coding.display = cast(display, 'string');\n };\n };\n };\n } "coding";\n } "val";\n obs.value : PQ as val then {\n val -> ob.value = create('Quantity') as quantity then {\n val.value as value -> quantity.value = value;\n val.unit as unit -> quantity.unit = unit;\n } "quantity";\n } "valueQuantity";\n obs.value : ST as value -> ob.value = create('string'), ob.value = (value.dataString);\n obs -> ob.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n obs -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";\n obs.interpretationCode -> ob.interpretation;\n obs.methodCode -> ob.method;\n obs.referenceRange as refRange -> ob.referenceRange = create('BackboneElement') as ref then {\n refRange.observationRange as obsRange -> ref.low = create('SimpleQuantity') as Low then {\n obsRange.value : IVL_PQ as v then {\n v.low as l1 then {\n l1.value as decValue -> Low.value = decValue;\n l1.unit as Unit -> Low.unit = Unit;\n } "decValue";\n } "IVLPQ";\n } "obsRange";\n } "refRange";\n obs.performer as performer -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'PUT', e1.resource = create('Practitioner') as practitioner, practitioner.id = uuid() as uuid1 then {\n performer.assignedEntity as assEntity then {\n assEntity -> practitioner.meta as meta then {\n assEntity -> meta.tag = create('Coding') as coding then {\n assEntity -> coding.system = 'http://algoritmodiscoring' "system";\n assEntity -> coding.code = 'ClinicalDocument/body/Consulenza/performer' "code";\n } "coding";\n } "meta";\n assEntity.id as id -> practitioner.identifier as identifier then {\n id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1";\n id.extension as ext -> identifier.value = ext;\n id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s;\n id.root as r then {\n id.extension as ext -> practitioner.id = (r + '-' + ext) as uuid2, e1.fullUrl = append('https://example/Practitioner/', uuid2), ob.performer = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut";\n } "r";\n } "identifier";\n assEntity.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then {\n id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID";\n } "2";\n assEntity.assignedPerson as assi then {\n assi.name -> practitioner.name;\n } "assi";\n } "assEntity";\n } "perf";\n obs.participant as participant -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('ServiceRequest') as serviceRequest, serviceRequest.id = uuid() as uuid1, e1.fullUrl = append('https://example/ServiceRequest/', uuid1), request.url = 'ServiceRequest', ob.basedOn = create('Reference') as reference, reference.reference = ('https://example/ServiceRequest/' + %serviceRequest.id) then {\n participant.time as t -> serviceRequest.authoredOn = (t.value);\n obs -> serviceRequest.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n obs -> serviceRequest.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";\n obs -> serviceRequest.status = 'active' "status";\n obs -> serviceRequest.intent = 'order' "intent";\n participant.participantRole as participantRole -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'PUT', e1.resource = create('Practitioner') as practitioner then {\n participantRole -> practitioner.meta as meta then {\n participantRole -> meta.tag = create('Coding') as coding then {\n participantRole -> coding.system = 'http://algoritmodiscoring' "system";\n participantRole -> coding.code = 'ClinicalDocument/body/Consulenza/participant' "code";\n } "coding";\n } "meta";\n participantRole.id as id -> practitioner.identifier as identifier then {\n id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1";\n id.extension as ext -> identifier.value = ext;\n id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s;\n id.root as r then {\n id.extension as ext -> practitioner.id = (r + '-' + ext) as uuid3, e1.fullUrl = append('https://example/Practitioner/', uuid3), serviceRequest.performer = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut";\n } "r";\n } "identifier";\n participantRole.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then {\n id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID";\n } "2";\n participantRole.playingEntity as pe then {\n pe.name -> practitioner.name;\n } "pe";\n };\n };\n}\n\ngroup ObservationEsamiDuranteRicovero(source obs : Observation, target patient : Patient, target encounter : Encounter, target ob : Observation, target bundle : Bundle) {\n obs -> ob.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n obs -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";\n obs.code -> ob.code;\n obs.statusCode as statusc where (code = 'completed') -> ob.status = 'final';\n obs.statusCode as statusc where (code = 'active') -> ob.status = 'registered';\n obs.statusCode as statusc where (code = 'aborted') -> ob.status = 'cancelled';\n obs.statusCode as statusc where (code = 'suspended') -> ob.status = 'partial';\n obs where obs.statusCode.exists().not() then {\n obs -> ob.status = 'final' "status";\n } "statuscode";\n obs.effectiveTime as effectiveTime -> ob.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value2r";\n obs where effectiveTime.low.exists() or effectiveTime.high.exists() then {\n obs.effectiveTime as eff -> ob.effective = create('Period') as period then IVLTSPeriod(eff, period) "value3r";\n } "where";\n obs.value : INT as int -> ob.value = (int.value);\n obs.value : BL as boolean -> ob.value = (boolean.value) "boolean";\n obs.value : CE as val then {\n val -> ob.value = create('CodeableConcept') as ce then {\n val.originalText as originalText then {\n originalText.reference as reference -> ce.text = reference;\n } "originltext";\n val -> ce.coding as coding then {\n val.code as code -> coding.code = cast(code, 'string');\n val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n val.displayName as display -> coding.display = cast(display, 'string');\n val.codeSystemVersion as version -> coding.version = cast(version, 'string');\n } "code";\n val.translation as translation -> ce.coding as coding then {\n translation.code as code -> coding.code = cast(code, 'string');\n translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n translation.displayName as display -> coding.display = cast(display, 'string');\n translation.codeSystemVersion as version -> coding.version = cast(version, 'string');\n translation.qualifier as qualifier then {\n qualifier.value as value -> ce.coding as coding then {\n value.code as code -> coding.code = cast(code, 'string');\n value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n value.displayName as display -> coding.display = cast(display, 'string');\n value.codeSystemVersion as version -> coding.version = cast(version, 'string');\n };\n };\n };\n } "coding";\n } "val";\n obs.value : CD as val then {\n val -> ob.value = create('CodeableConcept') as ce then {\n val.originalText -> ce.text;\n val -> ce.coding as coding then {\n val.code as code -> coding.code = cast(code, 'string');\n val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n val.displayName as display -> coding.display = cast(display, 'string');\n } "code";\n val.translation as translation -> ce.coding as coding then {\n translation.code as code -> coding.code = cast(code, 'string');\n translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n translation.displayName as display -> coding.display = cast(display, 'string');\n translation.qualifier as qualifier then {\n qualifier.value as value -> ce.coding as coding then {\n value.code as code -> coding.code = cast(code, 'string');\n value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri');\n value.displayName as display -> coding.display = cast(display, 'string');\n };\n };\n };\n } "coding";\n } "val";\n obs.value : PQ as val then {\n val -> ob.value = create('Quantity') as quantity then {\n val.value as value -> quantity.value = value;\n val.unit as unit -> quantity.unit = unit;\n } "quantity";\n } "valueQuantity";\n obs.value : ST as value -> ob.value = create('string'), ob.value = (value.dataString);\n obs -> ob.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n obs -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";\n obs.interpretationCode -> ob.interpretation;\n obs.methodCode -> ob.method;\n obs.effectiveTime as eff -> ob.effective = create('Period') as per then IVLTSPeriod(eff, per);\n obs.referenceRange as refRange -> ob.referenceRange = create('BackboneElement') as ref then {\n refRange.observationRange as obsRange -> ref.low = create('SimpleQuantity') as Low then {\n obsRange.value : IVL_PQ as v then {\n v.low as l1 then {\n l1.value as decValue -> Low.value = decValue;\n l1.unit as Unit -> Low.unit = Unit;\n } "decValue";\n } "IVLPQ";\n } "obsRange";\n } "refRange";\n obs.performer as performer -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'PUT', e1.resource = create('Practitioner') as practitioner, practitioner.id = uuid() as uuid1 then {\n performer.assignedEntity as assEntity then {\n assEntity -> practitioner.meta as meta then {\n assEntity -> meta.tag = create('Coding') as coding then {\n assEntity -> coding.system = 'http://algoritmodiscoring' "system";\n assEntity -> coding.code = 'ClinicalDocument/body/EsamiDuranteRicovero/performer' "code";\n } "coding";\n } "meta";\n assEntity.id as id -> practitioner.identifier as identifier then {\n id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1";\n id.extension as ext -> identifier.value = ext;\n id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s;\n id.root as r then {\n id.extension as ext -> practitioner.id = (r + '-' + ext) as uuid2, e1.fullUrl = append('https://example/Practitioner/', uuid2), ob.performer = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut";\n } "r";\n } "identifier";\n assEntity.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then {\n id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID";\n } "2";\n assEntity.assignedPerson as assi then {\n assi.name -> practitioner.name;\n } "assi";\n } "assEntity";\n } "perf";\n obs.participant as participant -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('ServiceRequest') as serviceRequest, serviceRequest.id = uuid() as uuid1, e1.fullUrl = append('https://example/ServiceRequest/', uuid1), request.url = 'ServiceRequest', ob.basedOn = create('Reference') as reference, reference.reference = ('https://example/ServiceRequest/' + %serviceRequest.id) then {\n participant.time as t -> serviceRequest.authoredOn = (t.value);\n obs -> serviceRequest.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n obs -> serviceRequest.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";\n obs -> serviceRequest.status = 'active' "status";\n obs -> serviceRequest.intent = 'order' "intent";\n participant.participantRole as participantRole -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'PUT', e1.resource = create('Practitioner') as practitioner then {\n participantRole -> practitioner.meta as meta then {\n participantRole -> meta.tag = create('Coding') as coding then {\n participantRole -> coding.system = 'http://algoritmodiscoring' "system";\n participantRole -> coding.code = 'ClinicalDocument/body/EsamiDuranteRicovero/participant' "code";\n } "coding";\n } "meta";\n participantRole.id as id -> practitioner.identifier as identifier then {\n id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1";\n id.extension as ext -> identifier.value = ext;\n id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s;\n id.root as r then {\n id.extension as ext -> practitioner.id = (r + '-' + ext) as uuid3, e1.fullUrl = append('https://example/Practitioner/', uuid3), serviceRequest.performer = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut";\n } "r";\n } "identifier";\n participantRole.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then {\n id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID";\n } "2";\n participantRole.playingEntity as pe then {\n pe.name -> practitioner.name;\n } "pe";\n };\n };\n}\n\ngroup periodTiming(source effectiveTime : PIVL_TS, target timing : Timing) {\n effectiveTime -> timing.repeat as r then {\n effectiveTime.period as p -> r.period = (p.value);\n effectiveTime.period as p -> r.periodUnit = (p.unit);\n } "repeat";\n}\n\n// ---------------------------------------------------------------------------------------\ngroup Act(source cda : Act, target pat : Patient, target ac : DiagnosticReport, target enc : Encounter, target bundle : Bundle) {\n cda.code -> ac.code;\n cda.statusCode as statusc where (code = 'completed') -> ob.status = 'final';\n cda.statusCode as statusc where (code = 'active') -> ob.status = 'registered';\n cda.statusCode as statusc where (code = 'aborted') -> ob.status = 'cancelled';\n cda.statusCode as statusc where (code = 'suspended') -> ob.status = 'partial';\n cda.effectiveTime as effectiveTime -> ac.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value2a";\n obs where effectiveTime.low.exists() or effectiveTime.high.exists() then {\n cda.effectiveTime as eff -> ac.effective = create('Period') as period then IVLTSPeriod(eff, period) "value3a";\n } "where";\n cda -> ac.subject = create('Reference') as reference, reference.reference = ('https://example/' + %pat.id) "reference";\n cda -> ac.encounter = create('Reference') as reference, reference.reference = ('https://example/' + %enc.id) "reference";\n cda.participant as part -> enc.participant as participant then {\n part -> participant.type as type then {\n part -> type.coding as coding then {\n part -> coding.code = (part.typeCode) "codice";\n part -> coding.system = 'http://terminology.hl7.org/CodeSystem/v3-ParticipationType' "system";\n } "codeType";\n } "type";\n part.participantRole as participantRole -> participant.individual = create('Reference') as reference then {\n participantRole -> bundle.entry as e, e.request = create('BackboneElement') as request, request.method = 'PUT', e.resource = create('Practitioner') as practitioner, practitioner.id = uuid() as uuid1, e.fullUrl = append('https://example/Practitioner/', uuid1), reference.reference = ('https://example/Practitioner/' + %practitioner.id) then {\n participantRole -> practitioner.meta as meta then {\n participantRole -> meta.tag = create('Coding') as coding then {\n participantRole -> coding.system = 'http://algoritmodiscoring' "system";\n participantRole -> coding.code = 'ClinicalDocument/body/Act/participant' "code";\n } "coding";\n } "meta";\n participantRole.id as id -> practitioner.identifier as identifier then {\n id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1";\n id.extension as ext -> identifier.value = ext then {\n participantRole -> request.url = append('Practitioner?identifier=', ext) "UUID";\n } "ext";\n id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s;\n } "identifier";\n participantRole.playingEntity as playingEntity then {\n playingEntity.name -> practitioner.name;\n };\n } "participanRoleBund";\n };\n };\n cda.entryRelationship as entryRelationship then {\n entryRelationship.observation as observation -> bundle.entry as e, e.request = create('BackboneElement') as request, request.method = 'POST', e.resource = create('Observation') as obs, obs.id = uuid() as uuid2, e.fullUrl = append('https://example/Observation/', uuid2), request.url = append('Observation/', uuid2), ac.result = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs.id) then Observation(observation, pat, enc, obs, bundle) "OBS";\n };\n}\n\ngroup ClinicalDocumentSectionTerapiaDimissione(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter) {\n src.title as t -> tgt.title = (t.dataString);\n src.code -> tgt.code;\n src where src.entry.exists() then {\n src.text as cdaText -> tgt.text as fhirText then {\n cdaText -> fhirText.status = 'generated' "narrativeStatus";\n cdaText as t -> fhirText.div = t "narrativeText";\n } "cdaText";\n } "exist";\n src where src.entry.exists().not() then {\n src.text as cdaText -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('MedicationRequest') as medicationRq, medicationRq.id = uuid() as uuid1, e1.fullUrl = append('https://example/MedicationRequest/', uuid1), request.url = 'MedicationRequest', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/MedicationRequest/' + %medicationRq.id) then {\n src -> medicationRq.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> medicationRq.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n src -> medicationRq.status = 'active' "status";\n src -> medicationRq.intent = 'order' "intent";\n cdaText -> medicationRq.medication = create('CodeableConcept') as codecon then {\n cdaText -> codecon.text = 'string' "text";\n } "code";\n cdaText -> medicationRq.note as note then {\n cdaText as t -> note.text = t "reference";\n } "reference";\n } "cdaText";\n } "where";\n src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('MedicationRequest') as medicationRq, medicationRq.id = uuid() as uuid1, e1.fullUrl = append('https://example/MedicationRequest/', uuid1), request.url = 'MedicationRequest', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/MedicationRequest/' + %medicationRq.id) then {\n src -> medicationRq.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";\n src -> medicationRq.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";\n src -> medicationRq.status = 'active' "status";\n src -> medicationRq.intent = 'order' "intent";\n entry1.substanceAdministration as substract then {\n substract.consumable as cons then {\n cons.manufacturedProduct as man1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Medication') as medication, medication.id = uuid() as uuid1, e1.fullUrl = append('https://example/Medication/', uuid1), request.url = 'Medication', medicationRq.medication = create('Reference') as medref, medref.reference = ('https://example/Medication/' + %medication.id) then {\n man1.manufacturedMaterial as mm then {\n mm.code -> medication.code;\n } "mm";\n substract.administrationUnitCode -> medication.form;\n substract.entryRelationship as entryR then {\n entryR.observation as observation then {\n observation.code where displayName = 'Grammatura' -> medication.ingredient as ingredient then {\n substract.consumable as consumable then {\n consumable.manufacturedProduct as manufacturedProduct then {\n manufacturedProduct.manufacturedMaterial as manufacturedMaterial then {\n manufacturedMaterial.code as code -> ingredient.item = create('CodeableConcept') as value then CECodeableConcept(code, value) "CE";\n } "material";\n } "product";\n };\n observation.value as value -> ingredient.strength as strength then {\n value -> strength.numerator as numerator then {\n value -> numerator.value = (value.value) "valueN";\n } "numerator";\n value -> strength.denominator as denominator then {\n value -> denominator.value = 1 "valueD";\n } "denominator";\n } "strenght";\n } "ingredient";\n observation.code where displayName = 'Quantità nella Confezione' then {\n observation.value as value -> medication.amount as amount then {\n value -> amount.numerator as numerator then {\n value -> numerator.value = (value.value) "valueN";\n } "numerator";\n value -> amount.denominator as denominator then {\n value -> denominator.value = 1 "valueD";\n } "denominator";\n } "amount";\n } "quantita";\n } "obs";\n } "entryR";\n substract.entryRelationship as entryRelationship then {\n entryRelationship.supply as sup -> medicationRq.dispenseRequest as dispreq then {\n sup -> dispreq.quantity = create('SimpleQuantity') as quantity then {\n sup.quantity as q -> quantity.value = (q.value);\n } "quantity";\n } "sub";\n } "entry";\n } "man1";\n } "cons";\n substract.text as tx -> medicationRq.note as note then {\n tx.reference as ref -> note.text = (ref.value);\n } "tx";\n substract.statusCode as st -> medicationRq.status = (st.code);\n substract.effectiveTime : IVL_TS as eff -> medicationRq.dosageInstruction = create('Dosage') as dosage then {\n eff -> dosage.timing = create('Timing') as timing then {\n eff -> timing.repeat as rep then {\n eff -> rep.bounds = create('Period') as period then IVLTSPeriod(eff, period) "period";\n } "rep";\n } "timing";\n } "period";\n substract.effectiveTime : EIVL_TS as eff -> medicationRq.dosageInstruction = create('Dosage') as dosage then {\n eff -> dosage.timing = create('Timing') as timing then {\n eff -> timing.repeat as rep then {\n eff.event as ev -> rep.when = (ev.code);\n } "rep";\n } "timing";\n } "period";\n substract.effectiveTime : IVL_TS as eff -> medicationRq.dosageInstruction = create('Dosage') as dosage, dosage.timing = create('Timing') as timing, timing.event = (eff.value) "tim";\n substract.effectiveTime : PIVL_TS as eff -> medicationRq.dosageInstruction = create('Dosage') as dosage then {\n eff -> dosage.timing = create('Timing') as timing then periodTiming(eff, timing) "cod";\n } "eff";\n substract -> medicationRq.dosageInstruction = create('Dosage') as dosage then {\n substract.routeCode -> dosage.route;\n } "dosage";\n substract -> medicationRq.dosageInstruction = create('Dosage') as dosage then {\n substract.approachSiteCode -> dosage.site;\n } "dosage";\n substract.doseQuantity as doseQuant -> medicationRq.dosageInstruction = create('Dosage') as dosageInstruction then {\n doseQuant.originalText as ot then {\n ot.reference -> dosageInstruction.text;\n } "ot";\n doseQuant -> dosageInstruction.doseAndRate as dosageRate then {\n doseQuant -> dosageRate.dose = create('Range') as d then {\n doseQuant -> d.low = create('SimpleQuantity') as l then {\n doseQuant.low as lo -> l.value = (lo.value);\n doseQuant.low as lo -> l.unit = (lo.unit);\n } "low";\n doseQuant -> d.high = create('SimpleQuantity') as h then {\n doseQuant.high as hi -> h.value = (hi.value);\n doseQuant.high as hi -> h.unit = (hi.unit);\n } "low";\n } "d";\n } "dosageRate";\n } "Dosage";\n substract.rateQuantity as rateQuantity -> medicationRq.dosageInstruction = create('Dosage') as dosageInstruction1 then {\n rateQuantity.originalText as ot then {\n ot.reference -> dosageInstruction1.text;\n } "ot";\n rateQuantity -> dosageInstruction1.doseAndRate as dosageRate then {\n rateQuantity -> dosageRate.rate = create('Range') as d then {\n rateQuantity -> d.low = create('SimpleQuantity') as l then {\n rateQuantity.low as lo -> l.value = (lo.value);\n rateQuantity.low as lo -> l.unit = (lo.unit);\n } "low";\n rateQuantity -> d.high = create('SimpleQuantity') as h then {\n rateQuantity.high as hi -> h.value = (hi.value);\n rateQuantity.high as hi -> h.unit = (hi.unit);\n } "low";\n } "d";\n } "dosageRate";\n } "rateq";\n substract.participant as part -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'PUT', e1.resource = create('Practitioner') as practitioner then {\n part.time as time -> medicationRq.authoredOn = (time.value);\n part.participantRole as partRole then {\n partRole -> practitioner.meta as meta then {\n partRole -> meta.tag = create('Coding') as coding then {\n partRole -> coding.system = 'http://algoritmodiscoring' "system";\n partRole -> coding.code = 'ClinicalDocument/body/TerapiaFarmacologicaRicovero/participant' "code";\n } "coding";\n } "meta";\n partRole.id as id -> practitioner.identifier as identifier then {\n id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1";\n id.extension as ext -> identifier.value = ext;\n id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s;\n id.root as r then {\n id.extension as ext -> practitioner.id = (r + '-' + ext) as uuid2, e1.fullUrl = append('https://example/Practitioner/', uuid2), request.url = append('Practitioner/', uuid1), medicationRq.performer = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut";\n } "r";\n } "identifier";\n partRole.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then {\n id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID";\n } "2";\n partRole.playingEntity as assi then {\n assi.name -> practitioner.name;\n } "assi";\n } "perf";\n } "partRole";\n } "participant";\n } "substract";\n}\n\n</pre>\n </div>"
},
"url" : "http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirLdo",
"version" : "0.1.0",
"name" : "cda2fhirLdo",
"status" : "draft",
"date" : "2024-09-15T08:16:12+00:00",
"publisher" : "HL7 Italy",
"contact" : [
{
"name" : "HL7 Italy",
"telecom" : [
{
"system" : "url",
"value" : "http://hl7.it"
}
]
}
],
"jurisdiction" : [
{
"coding" : [
{
"system" : "urn:iso:std:iso:3166",
"code" : "IT",
"display" : "Italy"
}
]
}
],
"structure" : [
{
"url" : "http://hl7.org/fhir/cda/StructureDefinition/ClinicalDocument",
"mode" : "source",
"alias" : "ClinicalDocument"
},
{
"url" : "http://hl7.org/fhir/cda/StructureDefinition/AssignedAuthor",
"mode" : "queried",
"alias" : "AssignedAuthor"
},
{
"url" : "http://hl7.org/fhir/cda/StructureDefinition/AssignedEntity",
"mode" : "queried",
"alias" : "AssignedEntity"
},
{
"url" : "http://hl7.org/fhir/cda/StructureDefinition/AssociatedEntity",
"mode" : "queried",
"alias" : "AssociatedEntity"
},
{
"url" : "http://hl7.org/fhir/cda/StructureDefinition/CustodianOrganization",
"mode" : "queried",
"alias" : "CustodianOrganization"
},
{
"url" : "http://hl7.org/fhir/cda/StructureDefinition/OrganizationPartOf",
"mode" : "queried",
"alias" : "OrganizationPartOf"
},
{
"url" : "http://hl7.org/fhir/cda/StructureDefinition/Organization",
"mode" : "queried",
"alias" : "rapresentedOrganization"
},
{
"url" : "http://hl7.org/fhir/cda/StructureDefinition/Section",
"mode" : "queried",
"alias" : "Section"
},
{
"url" : "http://hl7.org/fhir/cda/StructureDefinition/PatientRole",
"mode" : "queried",
"alias" : "PatientRole"
},
{
"url" : "http://hl7.org/fhir/cda/StructureDefinition/AD",
"mode" : "source",
"alias" : "AD"
},
{
"url" : "http://hl7.org/fhir/StructureDefinition/Bundle",
"mode" : "target",
"alias" : "Bundle"
},
{
"url" : "http://hl7.org/fhir/StructureDefinition/Composition",
"mode" : "produced",
"alias" : "Composition"
},
{
"url" : "http://hl7.org/fhir/StructureDefinition/Patient",
"mode" : "produced",
"alias" : "Patient"
},
{
"url" : "http://hl7.org/fhir/StructureDefinition/Encounter",
"mode" : "produced",
"alias" : "Encounter"
},
{
"url" : "http://hl7.org/fhir/StructureDefinition/Person",
"mode" : "produced",
"alias" : "Patient"
},
{
"url" : "http://hl7.org/fhir/StructureDefinition/Practitioner",
"mode" : "produced",
"alias" : "Practitioner"
},
{
"url" : "http://hl7.org/fhir/StructureDefinition/Organization",
"mode" : "produced",
"alias" : "Organization"
},
{
"url" : "http://hl7.org/fhir/cda/StructureDefinition/Act",
"mode" : "produced",
"alias" : "Act"
},
{
"url" : "http://hl7.org/fhir/cda/StructureDefinition/IVL-PQ",
"mode" : "source",
"alias" : "IVL_PQ"
},
{
"url" : "http://hl7.org/fhir/cda/StructureDefinition/PQ",
"mode" : "source",
"alias" : "PQ"
},
{
"url" : "http://hl7.org/fhir/StructureDefinition/SimpleQuantity",
"mode" : "target",
"alias" : "SimpleQuantity"
}
],
"import" : [
"http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirDataTypes",
"http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirHeader"
],
"group" : [
{
"name" : "CdaToBundle",
"typeMode" : "none",
"input" : [
{
"name" : "cda",
"type" : "ClinicalDocument",
"mode" : "source"
},
{
"name" : "bundle",
"type" : "Bundle",
"mode" : "target"
}
],
"rule" : [
{
"name" : "ClinicalDocumentToBody",
"source" : [
{
"context" : "cda"
}
],
"target" : [
{
"context" : "bundle",
"contextType" : "variable",
"element" : "entry",
"variable" : "e"
},
{
"context" : "e",
"contextType" : "variable",
"element" : "request",
"variable" : "request",
"transform" : "create",
"parameter" : [
{
"valueString" : "BackboneElement"
}
]
},
{
"context" : "request",
"contextType" : "variable",
"element" : "method",
"transform" : "copy",
"parameter" : [
{
"valueString" : "POST"
}
]
},
{
"context" : "e",
"contextType" : "variable",
"element" : "resource",
"variable" : "composition",
"transform" : "create",
"parameter" : [
{
"valueString" : "Composition"
}
]
},
{
"context" : "composition",
"contextType" : "variable",
"element" : "id",
"variable" : "uuid1",
"transform" : "uuid"
},
{
"context" : "e",
"contextType" : "variable",
"element" : "fullUrl",
"transform" : "append",
"parameter" : [
{
"valueString" : "https://example/Composition/"
},
{
"valueId" : "uuid1"
}
]
},
{
"context" : "request",
"contextType" : "variable",
"element" : "url",
"transform" : "copy",
"parameter" : [
{
"valueString" : "Composition"
}
]
},
{
"context" : "bundle",
"contextType" : "variable",
"element" : "entry",
"variable" : "e2"
},
{
"context" : "e2",
"contextType" : "variable",
"element" : "request",
"variable" : "requestPAT",
"transform" : "create",
"parameter" : [
{
"valueString" : "BackboneElement"
}
]
},
{
"context" : "requestPAT",
"contextType" : "variable",
"element" : "method",
"transform" : "copy",
"parameter" : [
{
"valueString" : "PUT"
}
]
},
{
"context" : "e2",
"contextType" : "variable",
"element" : "resource",
"variable" : "patient",
"transform" : "create",
"parameter" : [
{
"valueString" : "Patient"
}
]
},
{
"context" : "patient",
"contextType" : "variable",
"element" : "id",
"variable" : "uuid2",
"transform" : "uuid"
},
{
"context" : "e2",
"contextType" : "variable",
"element" : "fullUrl",
"transform" : "append",
"parameter" : [
{
"valueString" : "https://example/Patient/"
},
{
"valueId" : "uuid2"
}
]
},
{
"context" : "bundle",
"contextType" : "variable",
"element" : "entry",
"variable" : "e3"
},
{
"context" : "e3",
"contextType" : "variable",
"element" : "request",
"variable" : "request",
"transform" : "create",
"parameter" : [
{
"valueString" : "BackboneElement"
}
]
},
{
"context" : "request",
"contextType" : "variable",
"element" : "method",
"transform" : "copy",
"parameter" : [
{
"valueString" : "POST"
}
]
},
{
"context" : "e3",
"contextType" : "variable",
"element" : "resource",
"variable" : "encounter",
"transform" : "create",
"parameter" : [
{
"valueString" : "Encounter"
}
]
},
{
"context" : "encounter",
"contextType" : "variable",
"element" : "id",
"variable" : "uuid3",
"transform" : "uuid"
},
{
"context" : "e3",
"contextType" : "variable",
"element" : "fullUrl",
"transform" : "append",
"parameter" : [
{
"valueString" : "https://example/Encounter/"
},
{
"valueId" : "uuid3"
}
]
},
{
"context" : "request",
"contextType" : "variable",
"element" : "url",
"transform" : "copy",
"parameter" : [
{
"valueString" : "Encounter"
}
]
},
{
"context" : "bundle",
"contextType" : "variable",
"element" : "entry",
"variable" : "e5"
},
{
"context" : "e5",
"contextType" : "variable",
"element" : "request",
"variable" : "request",
"transform" : "create",
"parameter" : [
{
"valueString" : "BackboneElement"
}
]
},
{
"context" : "request",
"contextType" : "variable",
"element" : "method",
"transform" : "copy",
"parameter" : [
{
"valueString" : "POST"
}
]
},
{
"context" : "e5",
"contextType" : "variable",
"element" : "resource",
"variable" : "DocumentReference",
"transform" : "create",
"parameter" : [
{
"valueString" : "DocumentReference"
}
]
},
{
"context" : "DocumentReference",
"contextType" : "variable",
"element" : "id",
"variable" : "uuid5",
"transform" : "uuid"
},
{
"context" : "e5",
"contextType" : "variable",
"element" : "fullUrl",
"transform" : "append",
"parameter" : [
{
"valueString" : "https://example/DocumentReference/"
},
{
"valueId" : "uuid5"
}
]
},
{
"context" : "request",
"contextType" : "variable",
"element" : "url",
"transform" : "copy",
"parameter" : [
{
"valueString" : "DocumentReference"
}
]
}
],
"rule" : [
{
"name" : "cdatobundle",
"source" : [
{
"context" : "cda"
}
],
"dependent" : [
{
"name" : "ClinicalDocumentToBundle",
"variable" : [
"cda",
"patient",
"composition",
"encounter",
"bundle",
"DocumentReference"
]
}
]
},
{
"name" : "patient",
"source" : [
{
"context" : "cda",
"element" : "recordTarget",
"variable" : "recordTarget"
}
],
"rule" : [
{
"name" : "recPat",
"source" : [
{
"context" : "recordTarget",
"element" : "patientRole",
"variable" : "patient"
}
],
"rule" : [
{
"name" : "record",
"source" : [
{
"context" : "patient",
"element" : "id",
"variable" : "id"
}
],
"target" : [
{
"context" : "patient",
"contextType" : "variable",
"element" : "identifier",
"variable" : "identifier"
}
],
"rule" : [
{
"name" : "root1",
"source" : [
{
"context" : "id",
"element" : "root",
"variable" : "r"
}
],
"target" : [
{
"context" : "identifier",
"contextType" : "variable",
"element" : "system",
"transform" : "translate",
"parameter" : [
{
"valueId" : "r"
},
{
"valueString" : "http://hl7.org/fhir/ConceptMap/special-oid2uri"
},
{
"valueString" : "uri"
}
]
}
]
},
{
"name" : "extension",
"source" : [
{
"context" : "id",
"element" : "extension",
"variable" : "ext"
}
],
"target" : [
{
"context" : "identifier",
"contextType" : "variable",
"element" : "value",
"transform" : "copy",
"parameter" : [
{
"valueId" : "ext"
}
]
}
]
},
{
"name" : "assigningAuthorityName",
"source" : [
{
"context" : "id",
"element" : "assigningAuthorityName",
"variable" : "s"
}
],
"target" : [
{
"context" : "identifier",
"contextType" : "variable",
"element" : "assigner",
"variable" : "a"
},
{
"context" : "a",
"contextType" : "variable",
"element" : "display",
"transform" : "copy",
"parameter" : [
{
"valueId" : "s"
}
]
}
]
}
]
},
{
"name" : "ext",
"source" : [
{
"context" : "patient",
"element" : "id",
"variable" : "id",
"condition" : "(root = '2.16.840.1.113883.2.9.4.3.2') or (root = '2.16.840.1.113883.2.9.4.3.7') or (root = '2.16.840.1.113883.2.9.4.3.3') or (root = '2.16.840.1.113883.2.9.4.3.17') or (root = '2.16.840.1.113883.2.9.4.3.18') or (root = '2.16.840.1.113883.2.9.2.10.4.1.1') or (root = '2.16.840.1.113883.2.9.2.20.4.1.1') or (root = '2.16.840.1.113883.2.9.2.30.4.1.1') or (root = '2.16.840.1.113883.2.9.2.41.4.1.1') or (root = '2.16.840.1.113883.2.9.2.42.4.1.1') or (root = '2.16.840.1.113883.2.9.2.50.4.1.1') or (root = '2.16.840.1.113883.2.9.2.60.4.1.1') or (root = '2.16.840.1.113883.2.9.2.70.4.1.1') or (root = '2.16.840.1.113883.2.9.2.80.4.1.1') or (root = '2.16.840.1.113883.2.9.2.90.4.1.1') or (root = '2.16.840.1.113883.2.9.2.100.4.1.1') or (root = '2.16.840.1.113883.2.9.2.110.4.1.1') or (root = '2.16.840.1.113883.2.9.2.120.4.1.1') or (root = '2.16.840.1.113883.2.9.2.130.4.1.1') or (root = '2.16.840.1.113883.2.9.2.140.4.1.1') or (root = '2.16.840.1.113883.2.9.2.150.4.1.1') or (root = '2.16.840.1.113883.2.9.2.160.4.1.1') or (root = '2.16.840.1.113883.2.9.2.170.4.1.1') or (root = '2.16.840.1.113883.2.9.2.180.4.1.1') or (root = '2.16.840.1.113883.2.9.2.190.4.1.1') or (root = '2.16.840.1.113883.2.9.2.200.4.1.1') or (root = '2.16.840.1.113883.2.9.2.10.4.1') or (root = '2.16.840.1.113883.2.9.2.20.4.1') or (root = '2.16.840.1.113883.2.9.2.30.4.1') or (root = '2.16.840.1.113883.2.9.2.41.4.1') or (root = '2.16.840.1.113883.2.9.2.42.4.1') or (root = '2.16.840.1.113883.2.9.2.50.4.1') or (root = '2.16.840.1.113883.2.9.2.60.4.1') or (root = '2.16.840.1.113883.2.9.2.70.4.1') or (root = '2.16.840.1.113883.2.9.2.80.4.1') or (root = '2.16.840.1.113883.2.9.2.90.4.1') or (root = '2.16.840.1.113883.2.9.2.100.4.1') or (root = '2.16.840.1.113883.2.9.2.110.4.1') or (root = '2.16.840.1.113883.2.9.2.120.4.1') or (root = '2.16.840.1.113883.2.9.2.130.4.1') or (root = '2.16.840.1.113883.2.9.2.140.4.1') or (root = '2.16.840.1.113883.2.9.2.150.4.1') or (root = '2.16.840.1.113883.2.9.2.160.4.1') or (root = '2.16.840.1.113883.2.9.2.170.4.1') or (root = '2.16.840.1.113883.2.9.2.180.4.1') or (root = '2.16.840.1.113883.2.9.2.190.4.1') or (root = '2.16.840.1.113883.2.9.2.200.4.1') or (root = '2.16.840.1.113883.2.9.4.3.15')"
}
],
"rule" : [
{
"name" : "UUID",
"source" : [
{
"context" : "id",
"element" : "extension",
"variable" : "ext"
}
],
"target" : [
{
"context" : "requestPAT",
"contextType" : "variable",
"element" : "url",
"transform" : "append",
"parameter" : [
{
"valueString" : "Patient?identifier="
},
{
"valueId" : "ext"
}
]
}
]
}
]
}
]
}
]
}
]
}
]
},
{
"name" : "ClinicalDocumentToBundle",
"typeMode" : "none",
"input" : [
{
"name" : "cda",
"type" : "ClinicalDocument",
"mode" : "source"
},
{
"name" : "patient",
"type" : "Patient",
"mode" : "target"
},
{
"name" : "composition",
"type" : "Composition",
"mode" : "target"
},
{
"name" : "encounter",
"type" : "Encounter",
"mode" : "target"
},
{
"name" : "bundle",
"type" : "Bundle",
"mode" : "target"
},
{
"name" : "DocumentReference",
"type" : "DocumentReference",
"mode" : "target"
}
],
"rule" : [
{
"name" : "id",
"source" : [
{
"context" : "cda"
}
],
"target" : [
{
"context" : "bundle",
"contextType" : "variable",
"element" : "id",
"transform" : "uuid"
}
]
},
{
"name" : "identifier",
"source" : [
{
"context" : "cda",
"element" : "id",
"variable" : "vvv"
}
],
"target" : [
{
"context" : "bundle",
"contextType" : "variable",
"element" : "identifier",
"variable" : "vvv",
"transform" : "create"
}
]
},
{
"name" : "type",
"source" : [
{
"context" : "cda"
}
],
"target" : [
{
"context" : "bundle",
"contextType" : "variable",
"element" : "type",
"transform" : "copy",
"parameter" : [
{
"valueString" : "transaction"
}
]
}
]
},
{
"name" : "date",
"source" : [
{
"context" : "cda"
}
],
"target" : [
{
"context" : "bundle",
"contextType" : "variable",
"element" : "timestamp",
"transform" : "evaluate",
"parameter" : [
{
"valueString" : "timestamp.now()"
}
]
}
]
},
{
"name" : "composition",
"source" : [
{
"context" : "cda"
}
],
"dependent" : [
{
"name" : "ClinicalDocumentComposition",
"variable" : [
"cda",
"composition",
"patient",
"encounter",
"bundle",
"DocumentReference"
]
}
]
},
{
"name" : "component",
"source" : [
{
"context" : "cda",
"element" : "component",
"variable" : "component"
}
],
"rule" : [
{
"name" : "body",
"source" : [
{
"context" : "component",
"element" : "structuredBody",
"variable" : "body"
}
],
"rule" : [
{
"name" : "component",
"source" : [
{
"context" : "body",
"element" : "component",
"variable" : "component"
}
],
"rule" : [
{
"name" : "section",
"source" : [
{
"context" : "component",
"element" : "section",
"variable" : "srcSection"
}
],
"rule" : [
{
"name" : "motivoRicovero",
"source" : [
{
"context" : "srcSection",
"element" : "code",
"condition" : "(code = '46241-6')"
}
],
"target" : [
{
"context" : "composition",
"contextType" : "variable",
"element" : "section",
"variable" : "tgtSection"
}
],
"dependent" : [
{
"name" : "ClinicalDocumentSectionMotivoRicovero",
"variable" : [
"cda",
"srcSection",
"patient",
"tgtSection",
"bundle",
"encounter"
]
}
]
},
{
"name" : "inquadramentoClinico",
"source" : [
{
"context" : "srcSection",
"element" : "code",
"condition" : "(code = '47039-3')"
}
],
"target" : [
{
"context" : "composition",
"contextType" : "variable",
"element" : "section",
"variable" : "tgtSection"
}
],
"dependent" : [
{
"name" : "ClinicalDocumentSectionInquadramentoClinico",
"variable" : [
"cda",
"srcSection",
"patient",
"tgtSection",
"bundle",
"encounter"
]
}
]
},
{
"name" : "DecorsoOspedaliero",
"source" : [
{
"context" : "srcSection",
"element" : "code",
"condition" : "(code = '8648-8')"
}
],
"target" : [
{
"context" : "composition",
"contextType" : "variable",
"element" : "section",
"variable" : "tgtSection"
}
],
"dependent" : [
{
"name" : "ClinicalDocumentSectionDecorsoOspedaliero",
"variable" : [
"cda",
"srcSection",
"patient",
"tgtSection",
"bundle",
"encounter"
]
}
]
},
{
"name" : "Complicazioni",
"source" : [
{
"context" : "srcSection"